簡體   English   中英

在 R 中,如何將一個數據框中選定行的值與另一個數據框中選定的列匹配?

[英]In R, how do I match values from selected rows in one data frame with selected columns in another?

我有兩個單獨的數據框。 一個數據框中的一些列與另一個數據框中的某些行具有相同的名稱。 如何將對應於一個 df 中幾行的值與對應於另一個 df 中幾列(與行同名)的值匹配?

在此示例中,我想知道對於第一個 df 中的每一行,每個問題 (E4Q_) 下的值 (A/B/C/D) 是否與 df2 中 E4Q_ 行和“Answer”列的值匹配。 在此之后,我想在第三個數據框中打印 TRUE/FALSE 或 1/0,該數據框中的設置與第一個類似。

df1:
Name E4Q1 E4Q2 E4Q3 E4Q4 E4Q5 
XYZ  B    B    A    A    B
DEF  D    D    D    C    B
GHJ  -    -    B    A    C

    df2:
Question Answer
E4Q1     B
E4Q2     D
E4Q3     C
E4Q4     A
E4Q5     C

df3:
Name E4Q1 E4Q2 E4Q3 E4Q4 E4Q5 
XYZ  1    0    0    1    0
DEF  0    1    0    0    0
GHJ  0    0    0    1    1

如果您使用的是 R 的當前版本,則默認使用 stringsAsFactos=FALSE。 這個任務是一個很好的例子,說明為什么要做出改變。 Factos 會使這個過程完全復雜化。 如果您像我一樣,則需要使用明確設置的數據輸入:

 df1 <- read.table(text= "Name E4Q1 E4Q2 E4Q3 E4Q4 E4Q5 
 XYZ  B    B    A    A    B
 DEF  D    D    D    C    B
 GHJ  -    -    B    A    C", head=TRUE,stringsAsFactors=FALSE)
 
 df2 <- read.table(text=" Question Answer
 E4Q1     B
 E4Q2     D
 E4Q3     C
 E4Q4     A
 E4Q5     C", head=TRUE,stringsAsFactors=FALSE)

df3 <- df1 # same structure but Question columns will be changed to 1/0

首先嘗試:遍歷列名稱並將結果與​​ df​​2 中的正確值進行比較:

 for( i in names(df1[-1]) ){ df3[[i]] <- df1[[i]] == df2[df2$Question==i, 2] }
 df3
  Name  E4Q1  E4Q2  E4Q3  E4Q4  E4Q5
1  XYZ  TRUE FALSE FALSE  TRUE FALSE
2  DEF FALSE  TRUE FALSE FALSE FALSE
3  GHJ FALSE FALSE FALSE  TRUE  TRUE

所以需要強制轉換為數字,要么使用 as.numeric 要么添加 0。

 for( i in names(df1[-1]) ){ df3[[i]] <- ( df1[[i]] == df2[df2$Question==i, 2])+0 }
 df3
  Name E4Q1 E4Q2 E4Q3 E4Q4 E4Q5
1  XYZ    1    0    0    1    0
2  DEF    0    1    0    0    0
3  GHJ    0    0    0    1    1
 

暫無
暫無

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

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