【问题标题】:Count only string values in a row只计算一行中的字符串值
【发布时间】:2021-07-19 03:22:50
【问题描述】:

我的数据如下所示:

    Patent_number<-c(2323,4449,4939,4939,12245)
    IPC_class_1<-c("C12N",4,"C29N00185",2,"C12F")
    IPC_class_2<-c(3,"K12N","C12F","A01N",8)
    IPC_class_3<-c("S12F",1,"CQ010029393049",5,"CQ1N")
    
    df<-data.frame(Patent_number, IPC_class_1, IPC_class_2, IPC_class_3)
    View(df)

我想通过在数据框末尾添加另一列“计数”来仅计算每行的数字 o(字符串)值,例如 C12N、A01N 等。换句话说,我想从行数中排除数值。

有什么建议吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    数据框列中不能有混合类型,因此所有数值也将存储为类型character。一种方法是使用as.numeric 转换所有内容,然后使用is.na 计算那些不能强制转换为数字的内容...

    df$counts <- apply(sapply(df, as.numeric), 1, function(x) sum(is.na(x)))
    
    df
      Patent_number IPC_class_1 IPC_class_2 IPC_class_3 counts
    1          2323        C12N           3        S12F      2
    2          4449           4        K12N           1      1
    3          4939        C29N        C12F        CQ01      3
    4          4939           2        A01N           5      1
    5         12245        C12F           8        CQ1N      2
    

    【讨论】:

    • 非常感谢 - 它有效且易于理解。我可以添加后续问题:我已经稍微编辑了上面的示例。他们是一种只计算知道具有 4 位数字的字符值的方法吗?所以“C12N”应该算,但“C29N00185”不算行总和。
    • 基于上一个答案,这给出了每行中 4 个字符的字符串数:df$fours &lt;- apply(sapply(df, as.character), 1, function(x) sum(nchar(x) == 4))
    • 这很有趣。你能检查一下你在function(x)nchar(x)中都使用了小写的x吗?
    【解决方案2】:

    我们也可以通过检查所有字符是否都是数字来计算

    df$counts <- ncol(df) - Reduce(`+`, lapply(df, grepl, pattern = '^[0-9.]+$'))
    df$counts
    [1] 2 1 3 1 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      相关资源
      最近更新 更多