[英]How to sort a dataframe in R by mapping column names of one dataframe based on the order of row names of another dataframe?
[英]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.