在这里选择问题的答案:
没有给哈德利留下深刻的印象,对于我遇到的一些问题,后续的回答也不能很好地概括。我想知道社区是否可以通过一个更简单的示例做得更好:
### DATA ###
A = round(runif(200,0,1),0)
B = c(1 - A[1:100],rep(0,100))
C = c(rep(0,100), 1 - A[101:200])
dummies <- as.data.frame(cbind(A,B,C))
header <- c("Christian", "Muslim", "Athiest")
names(dummies) <- header
### ONE WAY ###
dummies$Religion <- factor(ifelse(dummies$Christian==1, "Christian",
ifelse(dummies$Muslim==1, "Muslim",
ifelse(dummies$Athiest==1, "Athiest", NA))))
Run Code Online (Sandbox Code Playgroud)
解决方案模仿上面链接中提供给OP的结果。有没有更简单的函数将虚拟变量折叠为一个因子变量,例如STATA中的egen group函数?一个简单的班轮会很棒。
使用Akrun的解决方案和系统时间(谢谢):
set.seed(24)
A = round(runif(2e6,0,1),0)
B = c(1 - A[1:1e6],rep(0,1e6))
C = c(rep(0,1e6), 1 - A[1000001:2000000])
dummies <- as.data.frame(cbind(A,B,C))
header <- c("Christian", "Muslim", "Athiest")
names(dummies) <- header
attach(dummies)
#Alistaire
system.time({
dummies %>% rowwise() %>% …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 dplyr 中的 mutate 创建条件变量,但这似乎对我不起作用。请参阅我尝试创建的示例数据框和组合得分变量。请注意,新变量“combined.score”的第三个观测值不是 B、C 和 D 的总和。看来仅计算第一个观测值,并且该值用于每个行观测值。
我在这里缺少什么?想要一个发生这种情况的原因(没有太多替代代码或解决方案)
df <-
data.frame(B=c(1,0,0),
C=c(3,4,9),
D=c(1,1,0))
#A function to calculate stations whether there is a communication or process component or both
df <- df %>%
mutate(combined.score = ifelse("B" %in% names(.) & "C" %in% names(.) & "D" %in% names(.), B + C + D,
ifelse("B" %in% names(.) & "C" %in% names(.), B + C,
B))) %>%
mutate(combined.score.correct = B + C + D)
Run Code Online (Sandbox Code Playgroud)