簡體   English   中英

從一列中的多列折疊相同的字符串

[英]Collapsing identical strings from multiple columns in one column

我需要將嵌套數據集重組為平面數據集。

我的數據集如下所示:

UserID   Test
<p>A &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X
<p>A &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y
<p>A &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Z
<p>B &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y
<p>B &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Z

每個用戶都完成了不同數量的測試,他們的順序是任意的。 X,Y和Z代表統一的字符串測試名稱。

我需要它看起來像這樣:

UserID &nbsp;X &nbsp;&nbsp; Y &nbsp;&nbsp; Z 
<p>A &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &nbsp;&nbsp; 1 &nbsp;&nbsp; 1 &nbsp;&nbsp;
<p>B &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 &nbsp;&nbsp; 1 &nbsp;&nbsp; 1 &nbsp;&nbsp;

1 - 完成測試; 0 - 沒有完成測試。

換句話說,我需要從多個列(不是單個字符串)執行某種標記化。

我很感激有關如何實現這一目標的任何建議。 謝謝!

我使用UserId作為標識符轉換數據集,但結果數據集的列數與任何用戶完成的最大測試數量一樣多(這很好),但相同的測試在用戶之間未對齊(例如,用戶A的第一列包含X因為用戶A首先完成了測試X,但是對於用戶B完成了Y,因為用戶沒有完成測試X,或者沒有以相同的順序完成測試)。

一個選擇是

library(dplyr)
library(tidyr)
df1 %>%
  extract(Test, into = c("Test", "colNm"), sep= "(.*);[^;]+$") %>%
  mutate(colNm = str_c(colNm, "&nbsp", sep="_")) %>%
  group_by(UserID) %>%
  mutate(rn = row_number()) %>%      
  spread(colNm, Test)

暫無
暫無

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

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