0

我在 excel 中有一个 excel 数据集,我想将它加载到 R 中。数据集有两个变量“重量”和“高度”,其中每个变量都有自己的日期,指定它的记录时间。height 变量具有跳过/缺失值,如果您深入了解数据,则在 weight 变量中也是如此。我正在尝试创建一个合并的数据集,其中体重和身高被组合并按日期排列在适当的位置,并且当值不存在时放置 NA。是否有任何命令/功能可以帮助我做到这一点?谢谢!

 obs     date   weight     date    height
  1   2010-10-04 52495  2010-10-04 11.6  
  2   2010-10-01 53000  2010-10-01 15.3
  3   2010-09-30 52916  2010-09-30 14.3
  4   2010-09-29 52785  2010-09-29 11.3
  5   2010-09-28 53348  2010-09-28 18.2
  6   2010-09-27 52885  2010-09-24 11.7
  7   2010-09-24 52174  2010-09-23 15.0
  8   2010-09-23 51461  2010-09-22 18.6
  9   2010-09-22 51286  2010-09-20 17.9
  10  2010-09-21 50968  
  11  2010-09-20 49250  
4

2 回答 2

2

我假设这个问题不是关于将数据读入 R,而是在读取数据后对其进行处理。不过,您可以使用参数check.names = FALSEfill = TRUE在读取数据时允许您用于Reduce合并数据。

首先,模拟读入数据。

temp <- read.table(header = TRUE, 
text = "obs date weight date height
1   2010-10-04 52495  2010-10-04 11.6
2   2010-10-01 53000  2010-10-01 15.3
3   2010-09-30 52916  2010-09-30 14.3
4   2010-09-29 52785  2010-09-29 11.3
5   2010-09-28 53348  2010-09-28 18.2
6   2010-09-27 52885  2010-09-24 11.7
7   2010-09-24 52174  2010-09-23 15.0
8   2010-09-23 51461  2010-09-22 18.6
9   2010-09-22 51286  2010-09-20 17.9
10  2010-09-21 50968
11  2010-09-20 49250
", fill = TRUE, check.names = FALSE)

其次,使用Reduce()merge()

Reduce(function(x, y) merge(x, y, all.x = TRUE), 
       list(temp[2:3], temp[4:5]))
#          date weight height
# 1  2010-09-20  49250   17.9
# 2  2010-09-21  50968     NA
# 3  2010-09-22  51286   18.6
# 4  2010-09-23  51461   15.0
# 5  2010-09-24  52174   11.7
# 6  2010-09-27  52885     NA
# 7  2010-09-28  53348   18.2
# 8  2010-09-29  52785   11.3
# 9  2010-09-30  52916   14.3
# 10 2010-10-01  53000   15.3
# 11 2010-10-04  52495   11.6
于 2013-01-05T17:53:34.403 回答
1
d <- read.table(header=FALSE, fill=TRUE, text="1   2010-10-04 52495  2010-10-04 11.6  
  2   2010-10-01 53000  2010-10-01 15.3
  3   2010-09-30 52916  2010-09-30 14.3
  4   2010-09-29 52785  2010-09-29 11.3
  5   2010-09-28 53348  2010-09-28 18.2
  6   2010-09-27 52885  2010-09-24 11.7
  7   2010-09-24 52174  2010-09-23 15.0
  8   2010-09-23 51461  2010-09-22 18.6
  9   2010-09-22 51286  2010-09-20 17.9
  10  2010-09-21 50968  
  11  2010-09-20 49250  ")

d1 <- d[2:3]
d2 <- d[!is.na(d[,5]),][4:5]

names(d1) <- c('Date', 'val1')
names(d2) <- c('Date', 'val2')
m <- merge(d1, d2, by='Date', all=TRUE)

> m

##          Date  val1 val2
## 1  2010-09-20 49250 17.9
## 2  2010-09-21 50968   NA
## 3  2010-09-22 51286 18.6
## 4  2010-09-23 51461 15.0
## 5  2010-09-24 52174 11.7
## 6  2010-09-27 52885   NA
## 7  2010-09-28 53348 18.2
## 8  2010-09-29 52785 11.3
## 9  2010-09-30 52916 14.3
## 10 2010-10-01 53000 15.3
## 11 2010-10-04 52495 11.6
于 2013-01-05T17:52:28.400 回答