r - 通过匹配 ID 和列名检索 data.frame 的值
问题描述
我有一个名为的数据框,df1
它有四列(即id
、s
和)。值列是空的,我想使用名为的第二个数据框填充它。用它们所属的日期命名的列和许多其他列填充。我只需要找到 in 的相应值,其中日期和 id 号都匹配。date
value
df2
df2
id
df1$value
df2
示例数据:
set.seed(123)
#df1
df1 <- data.frame(id = 1:100,
s = runif(100,100,1000),
date = sample(seq(as.Date('1999/01/01'), as.Date('2001/01/01'), by="day"), 100),
value = NA)
#df2
df2 <- data.frame(matrix(runif(80000,1,100), ncol=800, nrow=100))[-1]
names(df2) <- seq(as.Date("1999-01-01"),as.Date("2002-12-31"),1)[c(1:799)]
df2 <- cbind(id = 1:100, df2)
解决方案
一种方法是使用转换df2
为长格式gather
,然后执行left_join
library(dplyr)
library(tidyr)
df1 %>%
left_join(df2 %>%
gather(date, value, -id) %>%
mutate(date = as.Date(date)), by = c("id", "date"))
# id s date value
#1 1 359 2000-03-15 48.32
#2 2 809 1999-09-01 62.16
#3 3 468 1999-12-23 16.41
#4 4 895 2000-11-26 32.70
#5 5 946 1999-12-18 5.84
#6 6 141 2000-10-09 74.65
#7 7 575 2000-10-25 9.22
#8 8 903 2000-03-17 6.46
#9 9 596 1999-10-25 73.48
#10 10 511 1999-04-17 62.43
#...
数据
set.seed(123)
df1 <- data.frame(id = 1:100,
s = runif(100,100,1000),
date = sample(seq(as.Date('1999/01/01'), as.Date('2001/01/01'), by="day"), 100))
df2 <- data.frame(matrix(runif(80000,1,100), ncol=800, nrow=100))[-1]
names(df2) <- seq(as.Date("1999-01-01"),as.Date("2002-12-31"),1)[c(1:799)]
df2 <- cbind(id = 1:100, df2)
推荐阅读
- mysql - 我的代码没有在 chrome 浏览器上显示图像,但可以在 Internet Explorer 上找到
- java - 是否可以推迟 C++ 中 const 变量的初始化,例如 Java 的“空白最终”功能?
- dart - 在 Android 上使用 Firebase Facebook 和 Google 登录时出现问题
- powershell - Powershell - 从文本中选择特定单词
- asp-classic - ASP 内容显示问题
- javascript - wp_verify_nonce 在登台服务器上返回 false,但在 localhost 上返回 true
- css-animations - 角引导手风琴面板动画
- jenkins - 如何使用 credentialId 在我自己的 jenkins 插件中检索用户名/密码
- r - 'data' 必须是向量类型,为 'NULL' R - PCA 和 as.matrix
- c# - 如何在通用 JSON 中获取所有孩子和孩子的孩子和其他大孩子的总数