首页 > 解决方案 > 如何在R中以字符串为条件创建变量

问题描述

我正在尝试在 R(act_users)中的字符串的值的 df 条件中创建变量“活动”。如果 df 中变量 scr_name 和 rt_name 的名称在字符串内,我希望变量取值 1,如果不是 0。

df <- data.frame("screen_name" = c("august", "berit", "christopher", "david", "erica", "frank"), "rt_name" = c("berit", "august", "david", "erica", "frank", "christopher"))

act_users <- c("david", "august", "berit")

我尝试了以下 if else 语句,但它们都不起作用

'%!in%' <- function(x,y)!('%in%'(x,y))#create a function 

df$active <- ifelse((df$screen_name %in% act_users) & (df$rt_name %in% act_users), 1, 
                         ifelse((df$screen_name %!in% act_users) & (df$rt_name %!in% act_users), 2))

#attempts only with screenname
df$active <- ifelse(df$screen_name %in% act_users, "1", ifelse(df$screen_name %!in% act_users, "0"))


df$active <- if(df$screen_name %in% act_users){
  df$active == 1
} else {
  df$active == 0}

我的最后一个解决方案是将活动用户字符串设置为 df,合并结果并匹配数据框中的列,但是我的数据很大,所以使用更有效的解决方案会更好吗?

预先感谢!

标签: rdataframeif-statementtextconditional-statements

解决方案


也许你可以使用下面的代码来制作它,这可能比apply(df,1,...)你有很多行时更快:

  • 解决方案1:
df$active <- Reduce("*",lapply(df, function(x) ifelse(x %in% act_users,1,0)))
  • 解决方案2:
df <- within(df, active <- ifelse(screen_name%in%act_users & rt_name%in%act_users,1,0))

输出

> df
  screen_name     rt_name active
1      august       berit      1
2       berit      august      1
3 christopher       david      0
4       david       erica      0
5       erica       frank      0
6       frank christopher      0

推荐阅读