【发布时间】:2015-05-06 00:21:55
【问题描述】:
跟进this post。我们如何使用 dplyr 或 data.table 包将因子级别与共享行名适当地匹配?
library(data.table)
(DT = data.table(a = LETTERS[c(1, 1:3, 8)], b = c(2, 4:7),
c = as.factor(c("bob", "mary", "bob", "george", "alice")), key="a"))
# a b c
# 1: A 2 bob
# 2: A 4 mary
# 3: B 5 bob
# 4: C 6 george
# 5: H 7 alice
...并使用@frank 的最佳答案:
uc <- sort(unique(as.character(DT$c)))
( DT[,(uc):=lapply(uc,function(x)ifelse(c==x,b,NA))][,c('b','c'):=NULL] )
返回:
# a alice bob george mary
# 1 A NA 2 NA NA
# 2 A NA NA NA 4
# 3 B NA 5 NA NA
# 4 C NA NA 6 NA
# 5 H 7 NA NA NA
这里的最后一个问题是,我们如何获得以下输出,其中唯一的行名称共享级别值,返回空元素保留的 NA?
alice bob george mary
# 1 A NA 2 NA 4
# 2 B NA 5 NA NA
# 3 C NA NA 6 NA
# 4 H 7 NA NA NA
【问题讨论】:
-
如果你一直想要这个结果,你可以在你的另一个问题中预先要求它 -
spread是为此而构建的,但是你得到的答案假设你想要额外的行... -
如果你曾经看到
A,2,bob和A,3,bob的观察结果,你会遇到麻烦。您的数据是否以列a和b为键(每个组合最多出现一次)? -
@Sam-Firke 这是我直观的目标,但在我遗漏了大部分内容之后才注意到。如果您将此作为结果添加到您的其他回复中,我会投赞成票!
-
@Frank 不确定“a 和 b 是键”是什么意思。我正在寻求的答案与任意(即,>= 1 个每个级别的实例来创建唯一列)有关
-
哦,抱歉,我的意思是您是否有可能对
A,2,bob和A,3,bob进行观察?如果是这样,则新生成的列中的值对于结果中的行A列bob是不确定的。
标签: r data.table dplyr