![](/img/trans.png)
[英]how to extract each row of a dataframe and add the parsed strings from another dataframe to a column of the first data frame in R
[英]Merge column of a dataframe from row of another data frame
我正在嘗試合並兩個不同的數據框。
Id data
T1 100
T2 250
T3 300
T1 T2 T3
1 2 3
我試圖得到的輸出
Id data component
T1 100 1
T2 250 2
T3 300 3
dat1<-data.frame(Id=c("T1","T2","T3"),data=c(100,250,300))
dat2<-data.frame(T1=1,T2=2,T3=3)
只需使用t(dat2)
轉置dat2
data3<-data.frame(dat1,component=t(dat2))
> data3<-data.frame(dat1,component=t(dat2))
> data3
Id data component
T1 T1 100 1
T2 T2 250 2
T3 T3 300 3
關於什么 :
如果df是您的第一個data.frame,而vec是您的向量(名稱為“ T1”,“ T2”,“ T3”)
請注意,即使兩個名稱在兩個data.frames中的順序都不相同,使用match
仍可確保一切順利。
df$component<-vec[match(df$Id,names(vec))] # if vec is a vector
df$component<-unlist(vec[1,match(df$Id,colnames(vec))]) # if vec is a one row data.frame
資料 :
df<-structure(list(Id = structure(1:3, .Label = c("T1", "T2", "T3"),
class = "factor"), data = c(100L, 250L, 300L)),
.Names = c("Id","data"), class = "data.frame", row.names = c(NA, -3L))
vec<-structure(1:3, .Names = c("T1", "T2", "T3"))
輸出 :
> df
Id data component
1 T1 100 1
2 T2 250 2
3 T3 300 3
一種方法如下。 但是,如果您的數據與示例相同,則@ user2438475的想法可能是解決方法。
library(dplyr)
library(tidyr)
gather(mydf2, variable, component) %>%
left_join(mydf, ., by = c("Id" = "variable"))
# Id data component
#1 T1 100 1
#2 T2 250 2
#3 T3 300 3
數據
mydf <- structure(list(Id = structure(1:3, .Label = c("T1", "T2", "T3"
), class = "factor"), data = c(100L, 250L, 300L)), .Names = c("Id",
"data"), class = "data.frame", row.names = c(NA, -3L))
mydf2 <- structure(list(T1 = 1L, T2 = 2L, T3 = 3L), .Names = c("T1", "T2",
"T3"), class = "data.frame", row.names = c(NA, -1L))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.