0

RにロードしたいExcelのExcelデータセットがあります。データセットには「体重」と「高さ」の2つの変数があり、各変数には記録された日付が指定されています。高さ変数にはスキップ/欠損値があり、データを十分に下に移動すると、重量変数にも同様です。体重と身長を組み合わせて日付ごとに適切な場所に配置し、値が存在しない場合は 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 = FALSEを使用しfill = 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 に答える