У меня есть данные из моих учетных записей 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» или «Instagram» на основе приведенный выше фрейм данных.
Мои тактики c были следующими:
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$
s, могу ли я объединить операторы !is.na()
в один оператор на оператор if?