r - 如何创建一个函数来根据 R 中不同数据框中的值生成新变量
问题描述
我想创建一个这样的函数(显然不是正确的代码):
forEach ID in DATAFRAME1 look at each row with ID in DATAFRAME2 {
if DATAFRAME2$VARIABLE1 = something {
DATAFRAME1$VARIABLE1 = TRUE;
DATAFRAME1$VARIABLE2 = DATAFRAME2$VARIABLE2
}
}
在纯文本中,我有一个个人列表和一个包含这些个人混合信息的数据库。假设DATAFRAME2
包含有关已阅读书籍的信息c(id, title, author, date)
。我想创建一个新变量,DATAFRAME1
其中包含一个布尔值,即个人是否已阅读特定书籍(VARIABLE1
上)以及他们第一次阅读它的日期(VARIABLE2
上)。此外,添加第三个读取次数的变量会很有趣,但不是必需的。
我以前在R中没有真正做到这一点,主要是做基本的统计数据和与dplyr的基本争论。我想我可以使用dplyr并加入,但这感觉是一种更好的方法。任何让我开始的帮助将不胜感激。
解决方案
以下函数执行问题所要求的。它的论点是
DF1
并DF2
具有明显的含义;var1
并且var2
是VARIABLE1
并且VARIABLE2
在问题中;value
是 的值something
。
测试数据在最后。
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))
推荐阅读
- python - 如何替换句子中除一个以外的所有字符
- reactjs - 在 createTheme() 中添加自定义主题变量
- selenium-webdriver - 如何在不需要任何接受或拒绝条件的 Web 应用程序中为“警报弹出”编写代码
- python - Linear transformation for noisy data in python
- node.js - Dockerized Next.js 内存不足(OOM:代码 137),但数字不会添加到最大内存
- sql - SQL server - 创建一个视图以针对 3 个表验证列并获取 RECID 的最大记录
- apache-spark - 在 Spark SQL 的 collect_set 函数中指定分隔符
- vue.js - 如何通过单击 Vue.js 中的背景来关闭模式
- database - What is the differences between the term SSTable and LSM Tree
- java - Tomakehurst Wiremock。尝试连接到 8080。连接被拒绝