作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个这样的数据框:
v1 v2 v3
a 1 a
a 2 b
a 6 c
b 3 a
b 4 b
b 5 c
其中 v1 是一个因子,v3 是一个字符。我想对数据框应用一些函数,例如 v2 被拆分到 v1 中,然后包含在数据框中:
v1 v2 v3 v4 v5
a 1 a 1 NA
a 2 b 2 NA
a 6 c 6 NA
b 3 a NA 3
b 4 b NA 4
b 5 c NA 5
我能够解决的解决方案非常复杂。有没有一种优雅的方式来做到这一点?
(注意:v3 存在是因为任何解决方案都需要能够处理数据框中存在的其他非数值向量,而这些向量应该被忽略。)
最佳答案
1) transform/ifelse 如果 v1
中的已知值数量较少,一种简单的方法是手动生成每个新列:
transform(DF, a = ifelse(v1 == "a", v2, NA),
b = ifelse(v1 == "b", v2, NA))
2) tapply 更通用的方法是:
cbind(DF, tapply(DF$v2, list(1:nrow(DF), DF$v1), identity))
上述解决方案不需要任何插件包。
3) 数据表。此解决方案假定 v1
是一个因素,并且 DF
的行是唯一的(如问题中的情况):
# devtools::install_github("Rdatatable/datatable") # 1.9.3
library(data.table)
DT <- data.table(DF)
DT[, split(v2, v1), by = DT]
如果 DT
的行可能不是唯一的,那么(根据与 Arun 的讨论)这会起作用:
DT[, c(.SD, split(v2, v1)), by = 1:nrow(DT)][, -1, with = FALSE]
更新一些改进。
关于r - 在数据框中按因子拆分列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472254/
我是一名优秀的程序员,十分优秀!