拆分并计算数据帧列中的值

时间:2019-03-06 21:00:38

标签: r dataframe

我有一个数据框,其中一列的值用逗号分隔

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是如此强大,以至于有时令人困惑。

3 个答案:

答案 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