簡體   English   中英

Append 行名稱從一個 dataframe 到另一個具有不同尺寸的 R

[英]Append row names from one dataframe to another with different dimensions in R

我需要一些幫助來將行名稱從一個 dataframe 添加到另一個。

為了簡單起見,假設我有兩個不同維度的數據幀(df1 和 df2)(df1 是 3x3,df2 是 5x5)。 實際上我的數據框要大得多(即數千行/列)

df1 <- data.frame("rownames" = c("A", "B", "C"), "a1" = c(0,1,2), "a2" = c(2,0,1), "a3" = c(0,0,1), row.names = "rownames")

df2 <- data.frame("rownames" = c("A", "B", "D", "E", "F"), "a1" = c(1,1,2,2,0), a2 = c(2,0,0,1,0), a3 = c(1,0,2,3,0), a4 = c(1,1,0,0,1), a5 = c(0,0,0,0,0), row.names = "rownames")

我想做的是 append df1 的行包括 df2 中但不在 df1 中的行名稱“D”、“E”和“F”,這樣列(“a1 "、"a2"、"a3") 值將被設置為零。

所以輸入將是兩個數據幀:

df1
  a1 a2 a3
A  0  2  0
B  1  0  0
C  2  1  1

df2
  a1 a2 a3 a4 a5
A  1  2  1  1  0
B  1  0  0  1  0
D  2  0  2  0  0
E  2  1  3  0  0
F  0  0  0  1  0

所需的 output 將是:

  a1 a2 a3
A  0  2  0
B  1  0  0
C  2  1  1
D  0  0  0
E  0  0  0
F  0  0  0

謝謝!

如果你知道df1會變小 dataframe 而df2會變大,你可以這樣做:

df1[setdiff(rownames(df2), rownames(df1)), ] <- 0
df1

#  a1 a2 a3
#A  0  2  0
#B  1  0  0
#C  2  1  1
#D  0  0  0
#E  0  0  0
#F  0  0  0

以防萬一,如果您必須以編程方式確定更大/更小的 dataframe,您可以使用if條件對其進行測試

if(nrow(df1) > nrow(df2)) {
  small_df <- df2
  big_df <- df1
} else {
  small_df <- df1
  big_df <- df2
}

small_df[setdiff(rownames(big_df), rownames(small_df)), ] <- 0

我們可以將%in%與否定 ( ! )

df1[row.names(df2)[!row.names(df2) %in% row.names(df1)], ] <- 0
df1
#  a1 a2 a3
#A  0  2  0
#B  1  0  0
#C  2  1  1
#D  0  0  0
#E  0  0  0
#F  0  0  0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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