如何创建一个函数,根据R中不同数据帧中的值生成新变量
我想创建这样的函数(显然不是正确的代码): 在纯文本中,我有一个个人列表和一个数据库,其中包含关于这些人的混合信息 个人。比如说,如何创建一个函数,根据R中不同数据帧中的值生成新变量,r,database,dataframe,R,Database,Dataframe,我想创建这样的函数(显然不是正确的代码): 在纯文本中,我有一个个人列表和一个数据库,其中包含关于这些人的混合信息 个人。比如说,DATAFRAME2包含阅读c(id、标题、作者、日期)的书籍信息。我想在DATAFRAME1中创建一个新变量,布尔值为,如果个人读过一本特定的书(VARIABLE1),以及他们第一次读它的日期(VARIABLE2)。另外,添加第三个具有读取次数的变量也很有趣,但不是必需的 我以前在R中没有真正做过这件事,主要是做基本的统计和与dplyr的基本争论。我想我可以使用dp
DATAFRAME2
包含阅读c(id、标题、作者、日期)
的书籍信息。我想在DATAFRAME1
中创建一个新变量,布尔值为,如果个人读过一本特定的书(VARIABLE1
),以及他们第一次读它的日期(VARIABLE2
)。另外,添加第三个具有读取次数的变量也很有趣,但不是必需的
我以前在R中没有真正做过这件事,主要是做基本的统计和与dplyr的基本争论。我想我可以使用dplyr加入,但这感觉是一个更好的方法。如果您能为我提供任何帮助,我将不胜感激。以下函数满足问题的要求。它的论点是
DF1
和DF2
具有明显的意义李>
var1
和var2
是问题中的VARIABLE1
和VARIABLE2
李>
value
是某物的值
fun <- function(DF1, DF2, ID = 'ID', var1, var2, value){
DF1[[var1]] <- NA
DF1[[var2]] <- NA
k <- DF2[[var1]] == value
for(id in df1[[ID]]){
i <- DF1[[ID]] == id
j <- DF2[[ID]] == id
if(any(j & k)){
DF1[[var1]][i] <- TRUE
DF1[[var2]][i] <- DF2[[var2]][j & k]
}
}
DF1
}
fun(df1, df2, value = 4, var1 = 'X', var2 = 'Y')
# ID X Y
#1 a NA NA
#2 d TRUE 19
fun请发布可复制的示例和预期输出。
fun <- function(DF1, DF2, ID = 'ID', var1, var2, value){
DF1[[var1]] <- NA
DF1[[var2]] <- NA
k <- DF2[[var1]] == value
for(id in df1[[ID]]){
i <- DF1[[ID]] == id
j <- DF2[[ID]] == id
if(any(j & k)){
DF1[[var1]][i] <- TRUE
DF1[[var2]][i] <- DF2[[var2]][j & k]
}
}
DF1
}
fun(df1, df2, value = 4, var1 = 'X', var2 = 'Y')
# ID X Y
#1 a NA NA
#2 d TRUE 19
set.seed(1234)
df1 <- data.frame(ID = c("a", "d"))
df2 <- data.frame(ID = rep(letters[1:5], 4),
X = sample(20, 20, TRUE),
Y = sample(20))