古いデータフレームの列の値と一致する値のリストを使用して、新しいデータフレームを作成しようとしています。また、新しいデータフレームについては、一致に使用される値のリストからの順序を保持したいと思います。これが私が達成したいことの例です:
#A list of values used for matching
time.new <- c(2, 3, 4, 3, 4, 5, 4, 5, 6)
#The old data frame which I would match on the column of **time.old**
old <- data.frame(time.old=1:10, y=rnorm(10))
time.old y
1 0.20320
2 -0.74696
3 -0.73716
4 -0.61959
5 1.12733
6 2.58322
7 -0.08138
8 -0.10436
9 -0.13081
10 -1.20050
#Here is the expected new data frame
time y
2 -0.74696
3 -0.73716
4 -0.61959
3 -0.73716
4 -0.61959
5 1.12733
4 -0.61959
5 1.12733
6 2.58322
dplyrからleft_joinを試してください。まず、time.newをデータフレームの列に変換します。
library(tidyverse)
time.new <- c(2, 3, 4, 3, 4, 5, 4, 5, 6)
#The old data frame which I would match on the column of **time.old**
old <- data.frame(time.old=1:10, y=rnorm(10))
time.new <- data.frame(time=time.new)
new_dataframe <- left_join(time.new, old, by=c("time"="time.old"))
ベースRではマージを使用します。
merge(x = time.new, y = old, by.x = "time", by.y="time.old", all.x = TRUE)
time.newの順序を保持する場合は、データに補助行番号列を追加し、マージして、行番号で順序付けし、id列を削除する必要があります。
time.new <- c(2, 3, 4, 3, 4, 5, 4, 5, 6)
old <- data.frame(time.old=1:10, y=rnorm(10))
time.new <- data.frame(id = 1:length(time.new), time=time.new)
new_dataframe <- merge(x = time.new, y = old, by.x = "time", by.y="time.old", all.x = TRUE)
new_dataframe <- new_dataframe[order(new_dataframe$id), ]
new_dataframe$id <- NULL
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加