【问题标题】:Combining data in R在 R 中组合数据
【发布时间】:2013-06-03 02:55:46
【问题描述】:

我正在分析一个 CSV 文件的实验结果,其中变量作为列,参与者作为行。在收集所有数据之前,我想对已有的数据进行初步分析。但是,我需要将我的一些参与者排除在分析之外。在不删除他们的数据(这可能会在以后给我带来问题)的情况下,我想出的最佳方法是创建一个新列,将其称为“排除”,然后为每个参与者输入 1 或 0 来定义谁将被排除在外。然后,当我运行统计信息时,我只对我的数据子集执行此操作(例如,其中 exclude == 0)。

当我下载完整的数据集时,问题就出现了 - 我如何从初步数据集的“排除”列中获取数据到完整的数据集中,确保所有的 0 和 1 都附加到正确的参与者?如果初步数据集和完整数据集的行的顺序完全相同,我可以看到如何复制和粘贴,但这似乎容易出错,并且为了创建排除列,按不同的列排序要容易得多.我试过rbindmerge,但据我所知,它们不起作用。

这是我正在尝试做的一个示例:

prelim <- data.frame(
participant = c(1,2,3),
exclude = c(0,1,0)
)

full = data.frame(
participant = c(1,2,3,4,5),
exclude = c(NA,NA,NA,NA,NA)
)

ideal = data.frame(
participant = c(1,2,3,4,5),
exclude = c(0,1,0,NA,NA)
)

【问题讨论】:

  • 我猜测(在没有示例的情况下)您遇到的问题源于使用attach。如果您停止使用attach 而是使用withsubset[,您将摆脱attach 创造的特殊可能性所造成的巨大混乱。
  • 听从 @DWin 的建议,但如果没有可重复的示例 (stackoverflow.com/questions/5963269/…),就不可能更有帮助
  • 感谢您的回复。我在上面包含了一个简化的示例,其中 NA 为空白。 Dwin,我没有使用附加。在内部,当我尝试合并功能时,它会制作所有列的 2 个副本,而我希望所有列保持不变。我无法用 %in% 弄清楚您的代码 - 我从未使用过该运算符。也许使问题复杂化的是,我通过手动输入数据在 excel 中创建排除列,而不是使用 if 或 ifelse 在 R 中创建列。这可能是解决问题的方法吗?
  • 不过,最好不要在 R 中编写“排除”标准来找出一种方法,因为有时我需要根据我必须单独评估的书面回复来排除人员。跨度>

标签: r csv dataset import-from-csv


【解决方案1】:

尝试合并

d <- merge(prelim, full, all = T)
d[!duplicated(d[,1]), ]

或者你可能对data.table感兴趣:

library(data.table)
DF1<-data.frame(x=1:3,y=4:6,t=10:12)
DF2<-data.frame(x=3:5,y=6:8,s=1:3)
library(data.table)
DF1 <- data.table(DF1, key = c("x", "y"))
DF2 <- data.table(DF2, key = c("x", "y"))
DF2[DF1] # for example
DF1[!DF2] # or maybe you want this?
DF2[!DF1]

【讨论】:

    【解决方案2】:

    鉴于我们看不到您的数据,我会考虑几种方法。

    你可以:

    导入两个数据集并根据您的条件生成排除变量,并根据参与者标识符使用您的完整数据集生成merge。如:

    merge(preliminarydata, completedata, by.x='participantid', by.y='participantid')
    

    或者使用 %in% 运算符完成排除变量而不进行任何合并。

    peopletoexclude <- which(participantsinfulldata %in% participantsinpreliminarydata)
    myfulldataset$exclude <- 0
    myfulldataset$exclude[peopletoexclude] <- 1
    

    或者可能是人们能想到的无数其他事情。

    或者直接删除您要排除的人员并执行初步分析。值得指出的是,除非您明确地 write.csv 覆盖旧的 CSV 文件,否则您在 R 中执行的任何数据操作都不会以任何方式影响您的原始 CSV。它加载数据,然后忘记您的 CSV。如果您需要保存您的分析,您可以save(myDatainR, file="myDatainR.Rdata") 并随时返回。

    【讨论】:

      猜你喜欢
      • 2015-03-10
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      相关资源
      最近更新 更多