【问题标题】:R Split a column containing a vector into multiple columns [closed]R将包含向量的列拆分为多列[关闭]
【发布时间】:2018-01-12 15:41:06
【问题描述】:

是否可以将包含具有 3 个元素的向量的列拆分为数据框内的 3 个单独的列?

一列包含像 c("aa","bb","cc") 这样的向量应该变成 3 列包含像

这样的奇异值
"aa" "bb" "cc"

声称这样做的每个 tidyr 或 dyplr 操作仅适用于字符串,并在拆分之前将我的列的内容格式化为字符串 "c("aa","bb","cc")" (?!)。

是否有任何库可以将向量拆分为单独的列?

【问题讨论】:

  • 数据框中的所有列都是向量,tidyr::spread 可以将长列转换为任何原子数据类型的宽列。您是否可能指的是一个列表列,其中每个元素都是一个向量?请添加示例数据以进行澄清。见:stackoverflow.com/q/5963269/8262231
  • 我不确定我是否完全理解,但如果你有一个向量MyVect <- c("aa","bb","cc"),你希望转换成列,那么你可以使用data.frame(t(MyVect))
  • cbind(df, do.call(rbind, df$a)) 将是一个选项

标签: r vector


【解决方案1】:

这是使用dplyrtidyr 的一种解决方案:

library(dplyr)
library(tidyr)

df %>% 
  unnest(a) %>% 
  group_by(id) %>% 
  mutate(key = row_number()) %>% 
  spread(key, a)

# A tibble: 2 x 4
# Groups: id [2]
     id `1`   `2`   `3`  
* <dbl> <chr> <chr> <chr>
1  1.00 aa    bb    cc   
2  2.00 aa    bb    cc   

使用 Florian 提供的数据:

df <- data.frame(
  id = c(1,2),
  a = I(list(c("aa", "bb", "cc"), c("aa", "bb", "cc")))
  )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多