r - 根据R中不同数据帧的两个变量的ifelse问题
问题描述
我有两个数据框。第一个 (A) 包含有关 GOALS 的信息,第二个 (B) 包含有关具有该 GOAL 的 ID 的特定信息:
> A
GOAL
1 A116642173
2 A116642174
3 A116642175
4 A116642176
5 A116642178
6 A116642181
> B
ID GOAL
1 1873 A116433509
2 478 A116642178
3 2165 A116192937
4 165 A116192937
5 313 A116433701
6 475 A116367456
我想根据另一个数据框在其中一个中创建新列。所以,首先我创建了额外的列:
> idkids=c(313,475,165,478,1873,2165)
> ids<-c(idkids)
> A[ ,paste0(ids)]<-0
> A
GOAL 313 475 165 478 1873 2165
1 A116642173 0 0 0 0 0 0
2 A116642174 0 0 0 0 0 0
3 A116642175 0 0 0 0 0 0
4 A116642176 0 0 0 0 0 0
5 A116642178 0 0 0 0 0 0
6 A116642181 0 0 0 0 0 0
我试图用它ifelse
来查找特定 ID 的目标,但我没有。我试图通过两种方式做到这一点:
for (i in 1:kids){
A[ ,i+1]<-ifelse(A[ ,i+1]%in%B$ID,"",
ifelse(A$GOAL%in%B$GOAL, 1, 0))
}
for (i in 1:kids){
A[ ,i+1]<-ifelse(A[,i+1]%in%B$ID & A$GOAL%in%B$GOAL,1,0)
}
但是我的代码无法识别特定的 ID,它没有给我 1 (TRUE) 或 0 (FALSE)。它给我所有列的 0... 任何人都可以帮助我吗?
解决方案
这是一种将“B”数据重塑为“宽”然后进行连接的方法
library(dplyr)
library(tidyr)
pivot_wider(B, names_from = ID, values_from = ID, values_fn = length,
values_fill = 0) %>%
right_join(A)
推荐阅读
- elasticsearch - 单索引或多索引
- python - 获得更灵活的函数柯里化的 Pythonic 配方
- haskell - 为什么 Haskell 中的这个“@”用法不能包含整个列表?
- python - Groupby 两列熊猫数据框和 shift().rolling()
- python - Python Ctypes NtQueryObject ObjectNameInformation 无异常中断
- python - 使用firebase admin SDK,Flask请求部署超时
- arrays - 使用二维数组作为转换表在 Verilog 中实现状态机
- xcode - 没有为目标提供 SOURCES:MyProject ?(OpenSceneGraph 基础)
- http - 如何加密离线企业网络中的http流量?
- reactjs - 如何在 React 导航中将用户从 URI 方案重定向到 App 的特定屏幕?