r - 基于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))
}
谢谢!
解决方案
这里有一个想法:
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
.
如果数据框中有NA
s,则可以使用 删除它们na.omit
。例如,df <- na.omit(df)
在运行上面的代码之前。
推荐阅读
- qt - 如何在 Qt Creator 的 ui.qml 文件中调用函数
- react-native - 在 React Native Expo 上添加用于身份验证流程的加载器
- amazon-web-services - AWS ALB 中的超时值
- javascript - 尝试使用动态道具渲染相同的反应组件(道具来自 json 文件)
- javascript - 失败:模块“DynamicTestModule”导入的意外值“TreeviewConfig”。请在单元测试中添加@NgModule 注解
- sql - Hive - 季度中的最大(而不是最后一个)日期
- python - 如何在不下载文档的情况下将文档从一个 REST API 传递到另一个 REST API
- typescript - 如何使用问题运算符优化代码
- javascript - 从 Material UI TextField 拨打电话或打开电子邮件客户端
- python - Python麻线错误:不支持的平台标签'linux_x86_64'