【问题标题】:R: compute the length of text data in a columnR:计算列中文本数据的长度
【发布时间】:2019-10-20 00:45:02
【问题描述】:

我有以下csv数据myData

   name   attribute
1  Name1  attr11,attr12,attr13
2  Name2  attr21
3  Name3  attr31,attr32

我想绘制属性数量的分布,为此我需要遍历每一行,并标记attribute 列中的数据,并计算长度。本质上,这应该给出一个与原始myData具有相同长度的向量或其他数据

我试过了:

num_attr <- length(as.list(strsplit(myData$attribute, ",")))  #this just returns 3

和:

num_attr <- as.list(strsplit(myData$attribute, ","))

这会返回一个类似的列表:

["attr11" "attr12" "attr13", "attr21", "attr31" "attr32"]

我也在考虑使用apply(),比如apply(myData, 1, func),但我不确定要输入什么func

总之,我如何绘制属性数量的分布/密度?

【问题讨论】:

    标签: r


    【解决方案1】:

    strsplit() 的输出是一个列表,因此如果您想要每个拆分中的元素数量,您应该使用*apply 函数。试试这个:

    num_attr <- sapply(strsplit(x = myData$attribute, split = ','), length)
    

    这会将length() 应用于每个列表元素(每个拆分)并返回一个长度为 N 的向量(其中 N 是 myData 中的行数)。

    如果您想将num_attr 作为列表,请执行以下操作:

    num_attr <- lapply(strsplit(x = myData$attribute, split = ','), length)
    

    【讨论】:

    • 这里也有简写 lengthslengths(strsplit(myData$attribute, ","))
    • @jenesaisquoi 使用 R 已经 5 年了,这是我第一次看到 lengths()。好的。也许我应该称自己为“jenesaispastout”。
    • 它是几年前添加的,可能在 R 3.2 左右——哈哈!
    【解决方案2】:

    我们还可以统计“属性”列中,的数量

    library(stringr)
    str_count(myData$attribute, ",") + 1
    #[1] 3 1 2
    

    数据

    myData <- structure(list(name = c("Name1", "Name2", "Name3"), 
     attribute = c("attr11,attr12,attr13", 
    "attr21", "attr31,attr32")), class = "data.frame", 
     row.names = c("1", 
    "2", "3"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      相关资源
      最近更新 更多