gpt4 book ai didi

r - 如何通过管道传输到 R 中的 if 语句

转载 作者:行者123 更新时间:2023-12-04 12:32:32 25 4
gpt4 key购买 nike

我有来 self 的 Facebook、Twitter、Instagram、Youtube 和 LinkedIn 帐户的数据,我想对其进行分析。我有一个类似于以下的数据框:

df <- data.frame(tw_likes = c(5,4,6,NA,NA,NA,NA,NA,NA), 
tw_comments = c(3,5,NA,NA,NA,NA,NA,NA,NA),
fb_likes = c(NA,NA,NA,7,4,8,NA,NA,NA),
fb_comments = c(NA,NA,NA,NA,NA,7,NA,NA,NA),
ig_likes = c(NA,NA,NA,NA,NA,NA,NA,NA,5),
ig_comments = c(NA,NA,NA,NA,NA,NA,43,4,2))

我想做的是创建一个附加列 Platform,它将根据上述数据框采用“Twitter、”Facebook 或“Ins​​tagram”的值。

我的策略如下:

for(i in 1:nrow(df){
if(!is.na(df$tw_likes[i]) | !is.na(df$tw_comments[i])){
df$Platform[i] <- "Twitter"
}
else if(!is.na(df$fb_likes[i]) | !is.na(df$fb_comments[i])){
df$Platform[i] <- "Facebook"
}
else if(!is.na(df$ig_likes[i]) | !is.na(df$ig_comments[i])){
df$Platform[i] <- "Instagram"
}
}

这确实有效,但阅读起来会变得更加困惑。事实上,我有更多的专栏和更多的社交媒体平台需要处理,那么有没有一种方法可以通过管道传输数据,这样我至少不必多次编写 df$

我的另一个想法是,如果我不能删除 df$,我可以将 !is.na() 语句合并为一个语句吗?声明?

最佳答案

这是 base R 中的一种方法,可以将数据集拆分为具有相同前缀列的 list(通过从列名称中删除后缀子字符串),执行 code>rowSums 创建逻辑 matrix,应用 max.col 获取每行的列位置并通过传递替换值向量更改该索引按照拆分列名的相同顺序

i1 <- max.col(sapply(split.default(df, sub("_.*", "", names(df))),
function(x) rowSums(!is.na(x)) > 0 ), 'first')
df$Platform <- c("Facebook", "Instagram", "Twitter")[i1]
df$Platform
#[1] "Twitter" "Twitter" "Twitter" "Facebook" "Facebook"
#[6] "Facebook" "Instagram" "Instagram" "Instagram"

关于r - 如何通过管道传输到 R 中的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634626/

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