我有以下数据集
df <-data.frame(fact=c("a,bo,v", "c,b,v,d", "c"))
我希望为每一行选择最后两项。所以,理想情况下我希望得到这个输出:
fact
1 bo,v
2 v,d
3 c
我尝试拆分行,然后选择最后两项:
spl <- strsplit(as.character(df$fact), split = ",")
tail(spl[[1]], n=2)
但是不要给我正确的结果
答案 0 :(得分:3)
你可以这样做:
lapply(lapply(strsplit(as.character(df$fact), split = ','), function(x) x[c(length(x)-1,length(x))]), paste, collapse = ',')
您拆分col,然后提取n和n-1索引。然后将它们粘贴在一起。
您可以通过执行以下操作来概括:
lapply(strsplit(as.character(df$fact), split = ','), function(x) x[(length(x)-n):length(x)] )
其中n不是您要采取的后退步骤。
使用tail
更简单。
lapply(strsplit(as.character(df$fact), split = ','), tail, n=2)
答案 1 :(得分:1)
我们可以使用sapply
基于fact
循环遍历split
,,
的所有元素,然后使用{选择最后n
个元素{1}}
tail
n <- 2
sapply(as.character(df$fact), function(x) {
temp = unlist(strsplit(x, ','))
tail(temp, n)
}, USE.NAMES = F)
#[[1]]
#[1] "bo" "v"
#[[2]]
#[1] "v" "d"
#[[3]]
#[1] "c"
的更好选择我觉得使用dplyr
rowwise