我有一張表,其中包含有關某些用戶的信息。我想要做的是提取每個用戶的第三行和最後一行...我該怎麼做?因此,例如:R如何獲得每個用戶的第三行和最後一行
User | num |
use1 | 3 |
use1 | 2 |
use1 | 5 |
use1 | 8 |
use1 | 6 |
use2 | 1 |
..
因此,在這個例子中,我會希望將該行與num = 5
和num = 6
,這將繼續爲表中的每個不同的用戶。
我有一張表,其中包含有關某些用戶的信息。我想要做的是提取每個用戶的第三行和最後一行...我該怎麼做?因此,例如:R如何獲得每個用戶的第三行和最後一行
User | num |
use1 | 3 |
use1 | 2 |
use1 | 5 |
use1 | 8 |
use1 | 6 |
use2 | 1 |
..
因此,在這個例子中,我會希望將該行與num = 5
和num = 6
,這將繼續爲表中的每個不同的用戶。
對於多種,這裏是一個plyr
解決方案:
library(plyr)
#group by user and return 3rd and last row
ddply(df, .(User), function(x) x[c(3, nrow(x)),])
這個怎麼樣?
library(dplyr)
# Assuming df is your sample data
df %>% group_by(User) %>% filter(row_number() %in% c(3, n()))
這沒有工作 – jim
以什麼方式?在這裏用dplyr 0.4.3 – jkeirstead
@jkeirstead - 可以確認它確實有效。話雖如此 - 'df%>%group_by(user)%>%slice(c(3,n()))'可能更簡潔 – thelatemail
你可以使用這樣的data.table解決方案:
library(data.table)
dt = data.table("user" = c(rep(1,5),rep(2,5)),"num" = c(3,2,5,8,6,10:6))
dt[, "row" := 1:.N, by =.(user)]
> dt[ , .(Num = 3,.N), by = .(user)]
user Num N
1: 1 3 5
2: 2 3 5
是dt假設是存儲我的表的變量,如果我已經有該變量,我必須包括第二行? – jim
@jim所以如果data.table包中有一個data.frame加載並運行'setDT(yourdataframename),然後像上面那樣運行它 – Kristofersen
@jim它看起來像你的數據框被命名爲df。所以你可以運行'setDT(df),然後用dt換出dt,它將全部工作。如果你的data.frame真的很大,data.table將是最快的解決方案。 – Kristofersen
我們可以使用base R
i1 <- with(data, as.logical(ave(seq_along(User), User, FUN =
function(x) seq_along(x) %in% c(3, length(x) & length(x) > 3))))
data[i1,]
非常感謝這樣做 – jim
這在語義上與下面的dplyr解決方案相同。 – jkeirstead
人們仍然使用plyr? –