我有一个数据框,其中一列的值用逗号分隔
a = data.frame("A" = c("a,d,w,e", "e,e", "d", "df,w,w,w"), "B" =c(1,2,3,4))
a
# A B
# a,d,w,e 1
# e,e 2
# d 3
# df,w,w,w 4
我想用逗号分割列值,并按值计数,然后将其放在另一个新列中
所以就像
A B Count
a,d,w,e 1 4
e,e 2 2
d 3 1
df,w,w,w 4 4
我会提供我尝试过的内容,但是对此我一无所知。 R是如此强大,以至于有时令人困惑。
答案 0 :(得分:2)
您也可以尝试:
a$res <- sapply(strsplit(as.character(a$A), ","), length)
A B res
1 a,d,w,e 1 4
2 e,e 2 2
3 d 3 1
4 df,w,w,w 4 4
或以简化的方式编写(由@markus提出):
a$res <- lengths(strsplit(as.character(a$A), ","))
此处将{A}列除以,
,然后评估结果长度。
或者类似@ d.b的,但带有stringr
:
res <- str_count(as.character(a$A), ",") + 1
A B res
1 a,d,w,e 1 4
2 e,e 2 2
3 d 3 1
4 df,w,w,w 4 4
在这种情况下,它计算逗号的数量并添加+ 1。
或与基数相同的逻辑:
a$res <- lengths(regmatches(as.character(a$A), gregexpr(",", as.character(a$A)))) + 1
答案 1 :(得分:1)
您只是在寻找类似的东西吗?
a$Count <- sapply(1:nrow(a),
function(x) length(unlist(strsplit(as.character(a[x, "A"]), split = ","))))
输出:
A B Count
1 a,d,w,e 1 4
2 e,e 2 2
3 d 3 1
4 df,w,w,w 4 4
答案 2 :(得分:1)
sapply(a$A, function(x) 1 + sum(gregexpr(",", x)[[1]] > 0))
#[1] 4 2 1 4