gpt4 book ai didi

r - 在 R 中的数据框中的一组列中查找列的值

转载 作者:行者123 更新时间:2023-12-05 08:36:45 26 4
gpt4 key购买 nike

我正在努力寻找跨 data.frame 的其他列的列的值。如果有人能帮助我,我将不胜感激。这些是我的数据的简化形式:

library(data.table)

df<-data.table(personid<-c(101, 102, 103, 104, 105, 201, 202, 203, 301, 302, 401),
hh_id<-c(1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4),
fatherid<-c(NA, NA, 101, 101, 101, NA, NA, 201, NA, NA, NA),
fatherid_1<-c(NA,101, 101, 101, NA, NA, 201, NA, NA, NA, NA),
fatherid_2<-c(101, 101, 101, NA, NA, 201, NA, NA, NA, NA, NA),
fatherid_3<-c(101, 101, NA, NA, NA, NA, NA, NA, NA, NA, NA),
fatherid_4<-c(101, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
fatherid_5<-c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA))

(真正的是185000行,最多17个变量,如fatherid_1fatherid_2 ... fatherid_17)

我想做的是创建一个变量来检查变量的值是否为 personid给定行的值与变量 fatherid_1 的任何值相同至 fatherid_5在同一行。对于给定的数据,结果应该是:

df$result <- c(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) 

但我需要一些东西来自动完成,超过 17 列,例如 fatherid_1 , 和很多行

如果您想了解我的计算意义,我正在尝试构建家庭网格,而不是仅使用同一行中的信息

非常感谢您!

最佳答案

两种 tidyverse 解决方案:

1-) 您可以使用 dplyr 的新 if_any().== 和 tidyr 的 replace_na()if_any() 避免了对 rowwise()reduce()/Reduce() 的需要:

library(dplyr)
library(tidyr)

df%>%mutate(result=replace_na(if_any(matches('fatherid'), ~.==personid), 0))

2-) 在 rowwise() 操作中,您可以应用一个函数来检查所有选定列的条件 map(), c_across ()%in%,生成一个逻辑向量。然后可以在同一调用中折叠/reduce()d。

library(purrr)
library(dplyr)

df%>%rowwise()%>%mutate(result=as.integer(reduce(map(c_across(fatherid_1:fatherid_5), ~. %in% personid), `|`)))

或使用管道,为了清楚起见:

#option 1
df%>%rowwise()%>%
mutate(result=map(c_across(fatherid_1:fatherid_5), ~. %in% personid)%>%
reduce(`|`)%>%
as.integer())
#option 2
df%>%rowwise()%>%
mutate(result=map_int(c_across(fatherid_1:fatherid_5), ~. %in% personid)%>%
reduce(max))

personid hh_id fatherid fatherid_1 fatherid_2 fatherid_3 fatherid_4 fatherid_5 result
1: 101 1 NA NA 101 101 101 NA 1
2: 102 1 NA 101 101 101 NA NA 0
3: 103 1 101 101 101 NA NA NA 0
4: 104 1 101 101 NA NA NA NA 0
5: 105 1 101 NA NA NA NA NA 0
6: 201 2 NA NA 201 NA NA NA 1
7: 202 2 NA 201 NA NA NA NA 0
8: 203 2 201 NA NA NA NA NA 0
9: 301 3 NA NA NA NA NA NA 0
10: 302 3 NA NA NA NA NA NA 0
11: 401 4 NA NA NA NA NA NA 0

关于r - 在 R 中的数据框中的一组列中查找列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67874735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com