我有一個如下所示的資料框:資料:
df<-tibble(id=c("ls1","ls1","ls2","ls4"),
symbol=c("a","a","b","df"),
var=c("-","gh","gh","lm"))
我想轉換為另一個資料框,如下所示:
ls1 lsp10 ls02 ls6
a _ gh _ _
a _ _ _ _
b _ _ gh _
df _ _ _ lm
為此,我正在使用回圈下面的代碼,但它不起作用?
for(i in 1:nrow(data)) {
for(j in 1:nrow(data)) {
if(identical(data[1,1], data[1,1]) && identical(data[1,2], data[1,2]) && data[1,3] = data[1,3]){
data[i,3] <- paste0(data[i,3],";",data[j,3])
data<- data[-j,]
}}}
資料檔案不會改變!任何的想法?
uj5u.com熱心網友回復:
一種選擇使用dplyr和tidyr
包括 row_id 輔助變數,以生成顯式符號變數,其中相同的值出現在不同的行上;如果需要,這可以很容易地洗掉。
更新為包括 - 用于 NA
library(tibble)
library(dplyr)
library(tidyr)
data <- tribble(
~id, ~symbol, ~var,
"ls1", "a", "-",
"lsp10", "a", "gh",
"ls02", "b", "gh",
"ls6", "df", "lm")
data %>%
mutate(row_id = row_number()) %>%
na_if("-") %>%
pivot_wider(names_from = id, values_from = var) %>%
mutate(across(everything(), ~replace_na(., "-")))%>%
select(row_id, everything())
#> # A tibble: 4 x 6
#> row_id symbol ls1 lsp10 ls02 ls6
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 1 a - - - -
#> 2 2 a - gh - -
#> 3 3 b - - gh -
#> 4 4 df - - - lm
由reprex 包(v2.0.1)于 2021 年 11 月 26 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/368650.html
