【问题标题】:How to subset two files based on one column in common?如何基于共同的一列对两个文件进行子集化?
【发布时间】:2015-02-18 09:40:36
【问题描述】:

如何根据一个共同的列对两个文件进行子集化?

我有两个文本文件,它们的一列具有相同的结构,即dateyear-m-d

   > head(wg)
        date  valu1   
 40034 2008-01-01 0.323   
 40058 2008-01-02 0.314 
  > head(reg)
    date      dval
 1 2008-01-01        0.225
 2 2008-01-02        0.235

读取一个文件:

 wg= read.table("C:\\Users\\wg.txt", sep ='' , header =TRUE)

但是两个文件之一缺少一些日期,因此wgreg 之间的行数不同,我无法进行任何计算。现在我需要对wg and reg 进行子集化(基于date),因此wgreg 具有相同的日期和行数。感谢您的帮助。

【问题讨论】:

  • 看来需要使用 wg$date %in% reg$date
  • 你能解释一下吗?你能把它扩展成一个回答吗
  • @Barry 以防他没有尽快回复您,完整的命令将是 wg <- wg[wg$date %in% reg$date,]
  • 谢谢@Mattrition 但我知道了wg : [1] date mint valu1 <0 rows> (or 0-length row.names)

标签: r subset


【解决方案1】:

数据示例

A<-as.Date(c("2008-01-01", "2008-01-02", "2008-01-03"))
valA<-as.numeric(c(0.333, 0.232, 0.123))
B<-as.Date(c("2008-01-01", "2008-01-02", "2008-01-04"))
valB<-as.numeric(c(0.225, 0.124, 0.345))

wg<-data.frame(A, valA)
reg<-data.frame(B, valB)

v1<-wg$A %in% reg$B

wg 的选定行:

wg[v1, ]

要获取 reg 的行号,您需要以相反的方式运行 %in%

【讨论】:

  • 非常感谢,但问题是在我的一个文件中没有1 2 3 4,正如您在wg 看到的那样,因此它不适用于我的文件。
  • 您收到的错误信息是什么? wg 是 data.frame 类的吗?
  • 没有错误但V1 = integer (0)。问题出在wg 没有1 2 3 4 但例如40034 请在我的问题中查看head(wg)。
  • @Barry:这听起来像是课堂问题。测试一个是字符/因子向量,另一个是日期向量。它们应该属于同一类。
  • 你可以把它变成class Date: reg$date
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 2011-09-23
  • 2023-03-10
相关资源
最近更新 更多