如何解决是否可以将引用列的值返回到r中的多个列
我正在组织一个适合我的研究的大型数据集。假设我有9个观察(记录)和4列,如下所示:
z <- data.frame("fa" = c(1,NA,2,1,1),"fb" = c(2,2),"initial_1" = c("A","B","A","C","D","A"),"initial_2" = c("D","D"))
我想根据前两列 fa 和的值创建两个新列 fa_new 和 fb_new fb ,它们链接到参考列 initial_1 和 initial_2 ,因此 fa == #
是匹配 intial _ #
。
例如,如上所示, fa 列的第一条记录是1
,该记录链接到 intial _ 1
。因此,新列 fa_new 的第一条记录将为“ A”。同样, fb 的第一条记录是2
,它链接到 intial _ 2
的“ D”;因此, fb_new 的第一条记录将为“ D”。
因此,我的期望是:
fa_new fb_new
1 A D
2 NA C
3 NA NA
4 A B
5 A NA
6 C NA
7 A NA
8 B B
9 A D
使用r可以吗?
解决方法
您可以使用lapply
对多个列执行此操作:
cols <- 1:2
init_cols <- paste0('initial_',cols)
new_cols <- paste0(names(z)[cols],'_new')
inds <- 1:nrow(z)
z[new_cols] <- lapply(z[cols],function(x) z[init_cols][cbind(inds,x)])
z
# fa fb initial_1 initial_2 fa_new fb_new
#1 1 2 A D A D
#2 NA 2 B C <NA> C
#3 NA NA B C <NA> <NA>
#4 2 1 B A A B
#5 1 NA A B A <NA>
#6 1 NA C A C <NA>
#7 2 NA D A A <NA>
#8 1 1 B D B B
#9 1 2 A D A D
这里的逻辑是我们用cbind
创建一个矩阵,该矩阵具有行/列号。行号为inds
(1:nrow(z)
),而列号来自fa
/ fb
列,这些列用于子集z
数据帧。
实际数据框被标记为数据集,以下答案应适用于实际数据。
cols <- 1:2
init_cols <- paste0('fuinitials_',1:94)
new_cols <- paste0(names(z)[cols],'_new')
inds <- 1:nrow(z)
z1 <- data.frame(z)
z1[cols][z1[cols] < 1] <- NA
z1[new_cols] <- lapply(z1[cols],function(x) z1[init_cols][cbind(inds,x)])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。