当前位置: 首页 > 知识库问答 >
问题:

在多个Data.Tables(或Data.Frames)中创建条件变量

暨承平
2023-03-14

我想在多个data.tables(或data.frames)中执行相同的操作。例如,我想在所有data.tables中的相同规则上创建相同的变量条件。

df1 <- data.frame(var1 = c(1, 2, 2, 2, 1), var2 =c(20, 10, 10, 10, 20), var3 = c(10, 8, 15, 7, 9))
df2 <- data.frame(var1 = c(1, 2, 2, 2, 1), var2 =c(20, 10, 10, 10, 20), var3 = c(10, 8, 15, 7, 9))
df3 <- data.frame(var1 = c(1, 2, 2, 2, 1), var2 =c(20, 10, 10, 10, 20), var3 = c(10, 8, 15, 7, 9))

列表.df

list.df<-vector('list',3)
for(j in 1:3){
  name <- paste('df',j,sep='')
  list.df[j] <- name
}

我的(坏的)试探性的:

for(i in 1:3){
  a<-get(paste(list.df[[i]], "$var1", sep=""))
  b<-get(paste(list.df[[i]], "$var2", sep=""))
  name<-paste(list.df[[i]], "$var.new", sep="")
  assign(name, ifelse(a==2 & b==10, 1, 0))
}

很明显,r不能像我现在所做的那样创建这个新变量,因为我会收到一条错误消息“Object not found”。有没有关于如何修复我的坏代码的线索?我有一种感觉dplyr可以帮助我,但我不知道如何帮助我。

共有1个答案

尚河
2023-03-14

在使用paste创建对象名字符串之后,我们可以使用mget,以便获得值IE。列表中的data.frames。我们通过创建二进制变量('var new')来循环list(lapply(...,)和transform每个数据集。我们可以在逻辑语句上使用ifelse,也可以使用+来将true/false强制为1/0。

lst <- lapply(mget(paste0('df', 1:3)), transform, 
           varNew = +(var1==2 & var2==10))

如果需要更新原始对象,可以使用list2env

list2env(lst, envir = .GlobalEnv)
df1
df2
 类似资料:
  • 我需要帮助完成一项看似简单的任务。我想基于< code>dplyr::mutate中的一个条件创建几个新变量。我可以使用< code>ifelse创建一个新变量,但是我想一步创建几个。 让我们假设这是我的数据帧。 我想要这样的东西: 因此,if条件应该基于条件< code>y创建三个新变量 我想与< code>if_else和< code>case_when一起使用。 谢谢转发

  • 问题内容: 我想用Python(不是数组)中的一个创建10个变量。像这样: 我想创建的变量名,在这种情况下: ,,,…, 我不想一个数组 我有一个坐标图(640 x 480)。我正在确定像素颜色为白色的坐标。地面上有3个球,我想获取每个球的中心坐标,因此,如果要评估的坐标距离最后一个球很近,则x和y坐标将被平均(如果该坐标属于a)新球的坐标将属于新坐标组。 问题答案: 您不应该这样做,但是如果您真

  • 问题内容: 我想所有和来自ID,是否有类似的东西而言,其与正则表达式的作品或有任何其他方式?否则,我将不得不针对每个项目(例如000ANT和0BBNTA)查询elasticsearch。请帮忙。 以下是我要尝试的一些东西,即1,但我也想有一个or条件,以便正则表达式也可以匹配。 问题答案: 使用而不是:

  • 问题内容: 我有一个小代码问题,它适用于IDLE而不适用于Eclipse,我可以这样写吗: 代替这个: 谢谢。 问题答案: 使用和顺序: 它针对一个元组进行测试,哪个Python将方便而有效地将其存储为一个常量。您还可以使用设置文字: 但只有Python的最新版本(Python 3.2 和更高版本)才会将此视为不变的常量。对于更新的代码,这是最快的选择。 因为这是一个字符,所以您甚至可以使用字符串

  • 我试图为数据集创建多水平条形图。这些数据涉及跑步比赛的比赛时间。 Dataframe有以下列:名称、年龄组、完成时间、完成地点、家乡。下面是示例数据。 我想创建一个类似下图的条形图。每个年龄组将有一个条形图,最快的跑步者在图表的底部,跑步者的名字与城市和次数跑了比赛低于他们的名字。 我需要一个for循环还是一个简单的groupby工作?每个年龄组的数量和大小可以根据种族动态变化,因此它不是一个常数

  • 虽然这段代码似乎可以按照td行的预期更改$TDStyle,但它没有根据esleif条件适当地更新$Font和$Text。它似乎总是保持这些字符串相同,仅基于else条件,即使它不是真的。也许只是语法问题?我确信有一个更好的方法来做到这一点,但我有限的知识使我走到了这一步。有什么建议吗?