【问题标题】:Split all values in column and store them in a single numeric vector拆分列中的所有值并将它们存储在单个数字向量中
【发布时间】:2021-03-30 05:25:43
【问题描述】:

我在 R 中有一个数据框,我想通过拆分特定列中的所有字符值然后将它们附加到向量或列表来创建单个数字向量。该列中的值都是逗号分隔的数字,并且存在缺失值或NA的行。

当前数据

id col
1  2,6,10
2  NA
3  5, 10 
4  1

最终向量

# v <- c(2, 6, 10, 5, 10, 1)
# v
[1] 2 6 10 5 10 1

我可以通过遍历列中的所有值来做到这一点,但我知道这不是最有效的方法,因为 R 可以轻松地与向量一起使用。有没有更好的方法来做到这一点?

v <- c()
for(val in df$col){
  if(!is.na(val)){
    ints <- as.numeric(unlist(strsplit(val, ",")))
    v <- c(v, ints)
  }
}

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    您的代码中已经有了答案,因为您使用的所有函数都是矢量化的。

    v <- as.numeric(na.omit(unlist(strsplit(df$col, ','))))
    v
    #[1]  2  6 10  5 10  1
    

    【讨论】:

      【解决方案2】:

      这行得通吗:

      library(dplyr)
      library(tidyr)
      df %>% separate_rows(col) %>% na.omit() %>% pull(col) %>% as.numeric() -> v
      v
      [1]  2  6 10  5 10  1
      

      使用的数据:

      df
      # A tibble: 4 x 2
           id col   
        <dbl> <chr> 
      1     1 2,6,10
      2     2 NA    
      3     3 5, 10 
      4     4 1    
      

      【讨论】:

      • 这可行,但我希望最终值为 numeric 类型,以便我可以在末尾添加一个额外的管道 %&gt;% as.numeric
      • @fastlanes,已编辑答案,只需在代码中添加as.numeric
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 2020-01-16
      相关资源
      最近更新 更多