簡體   English   中英

從另一個數據框的行合並一個數據框的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM