gpt4 book ai didi

r - 在数据框中按因子拆分列

转载 作者:行者123 更新时间:2023-12-02 05:49:41 26 4
gpt4 key购买 nike

假设我有一个这样的数据框:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com