首页 > 解决方案 > 基于R中的多个相似变量创建变量

问题描述

我的数据看起来像这样(变量zipid1-zipid13和变量hospid范围从 1-13:

  zipid1 zipid2 zipid3 zipid4 zipid5 zipid6 zipid7 zipid8 zipid9 zipid10 zipid11 zipid12 zipid13 hospid local
1      0      0      0      0      1      0      0      0      0       0       0       0       0      5     0
2      0      0      1      0      1      0      0      0      0       0       0       0       0      5     0
3      0      0      0      0      0      0      1      0      0       0       0       0       0      5     0
4      0      0      1      0      0      0      0      0      0       0       0       0       0      5     0
5      0      0      1      0      1      0      0      0      0       0       0       0       0      5     0
6      0      0      0      0      1      0      0      0      0       0       0       0       0      5     0

.etc时如何创建局部变量 = 1 。zipid1 ==1 & hospid =1, zipid2 == 1 & hospid == 2否则 = 0(即 zipid = hospid)?

我试过ifelse但效果不佳。

for (i in 1:13) {
name = paste0("zipid", i)
local$local <- with(local, ifelse(name == 1 & hospid == i, 1, 0))
}

谢谢!

标签: rloopsif-statement

解决方案


这里有一个想法:

df$local <-  unlist(lapply(1:nrow(df), function(x)df[x, paste("zipid", df$hospid, sep = "")[x]]))

给予

#   zipid1 zipid2 zipid3 zipid4 zipid5 zipid6 zipid7 zipid8 zipid9 zipid10 zipid11 zipid12 zipid13 hospid local
# 1      0      0      0      0      1      0      0      0      0       0       0       0       0      5     1
# 2      0      0      1      0      1      0      0      0      0       0       0       0       0      5     1
# 3      0      0      0      0      0      0      1      0      0       0       0       0       0      5     0
# 4      0      0      1      0      0      0      0      0      0       0       0       0       0      5     0
# 5      0      0      1      0      1      0      0      0      0       0       0       0       0      5     1
# 6      0      0      0      0      1      0      0      0      0       0       0       0       0      5     1

他们的工作方式是我取每一行中的值,hospid然后将其粘贴zipid到类似zipid5. 我查找与特定行对应的特定列中的值,并检查它是否为1.


如果数据框中有NAs,则可以使用 删除它们na.omit。例如,df <- na.omit(df)在运行上面的代码之前。


推荐阅读