我有以下資料集
df1 <- data.frame(
ACCESSION=c("123456","123456", "234567", "234567","345678", "345678","456789","456789"),
MRN=c("1", "1", "2", "2", "3", "3", "4", "4"),
SOURCE=c("BAL", "BAL", "BAL","BAL", "BAL", "BAL", "BW", "BW"),
TASK_TYPE=c("Stain", "Culture","Stain", "Culture","Stain", "Culture","Stain", "Culture"),
RESULT=c("Neg", "Pos","Neg", "Pos","Neg", "Pos","Neg", "Pos"))
但我想將該列分成兩列,并根據該列TASK_TYPE的回應填充(同時保持所有其他列不變)。所以我希望它看起來像這樣RESULTACCESSION
df2 <- data.frame(
ACCESSION=c("123456","234567","345678", "456789"),
MRN=c("1", "2", "3", "4"),
SOURCE=c("BAL", "BAL", "BAL", "BW"),
STAIN=c("Neg","Neg","Neg","Neg"),
CULTURE=c("Pos","Pos","Pos","Pos"))
ACCESSION MRN SOURCE STAIN CULTURE
123456 1 BAL Neg Pos
234567 2 BAL Neg Pos
345678 3 BAL Neg Pos
456789 4 BW Neg Pos
我到處尋找并且已經接近但我無法找到確切的解決方案。先感謝您!
uj5u.com熱心網友回復:
pivot_wider從tidyr包裝中使用:
library(tidyr)
df1 %>% pivot_wider(names_from = TASK_TYPE, values_from = RESULT)
輸出:
# ACCESSION MRN SOURCE Stain Culture
# <chr> <chr> <chr> <chr> <chr>
# 1 123456 1 BAL Neg Pos
# 2 234567 2 BAL Neg Pos
# 3 345678 3 BAL Neg Pos
# 4 456789 4 BW Neg Pos
uj5u.com熱心網友回復:
使用dcast
library(data.table)
dcast(setDT(df1), ... ~ TASK_TYPE, value.var = 'RESULT')
-輸出
Key: <ACCESSION, MRN, SOURCE>
ACCESSION MRN SOURCE Culture Stain
<char> <char> <char> <char> <char>
1: 123456 1 BAL Pos Neg
2: 234567 2 BAL Pos Neg
3: 345678 3 BAL Pos Neg
4: 456789 4 BW Pos Neg
uj5u.com熱心網友回復:
使用基本 R 選項reshape
reshape(
df1,
direction = "wide",
idvar = c("ACCESSION", "MRN", "SOURCE"),
timevar = "TASK_TYPE"
)
給
ACCESSION MRN SOURCE RESULT.Stain RESULT.Culture
1 123456 1 BAL Neg Pos
3 234567 2 BAL Neg Pos
5 345678 3 BAL Neg Pos
7 456789 4 BW Neg Pos
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480393.html
下一篇:造一句話總結一個簡單的資料框
