简单的问题,
我在下面用代码/输出提供了两个不同的数据框,为什么一个工作而另一个不工作?无法理解键/值输入(当需要明确定义时/以及将它们作为输入中的字符串意味着什么)。
library(tidyverse)
dat <- data.frame(one = c("x", "x", "x"), two = c("x", "", "x"),
three = c("", "", ""), type = c("chocolate", "vanilla", "strawberry"))
dat %>%
na_if("") %>%
gather("Key", "Val", -type,na.rm=TRUE) %>%
rowid_to_column %>%
spread(Key, Val,fill = "") %>%
select(-1) # works well
dat %>%
na_if("") %>%
gather("Key", "Val", -type,na.rm=TRUE)
Error: Strings must match column names. Unknown columns: Val
额外信用:如果有人能解释rowit_to_column
&amp; spread()
,这会有所帮助。
答案 0 :(得分:1)
也许我错过了什么,但我无法重现你的错误。
dat %>%
na_if("") %>% # Replace "" with NA
gather("Key", "Val", -type, na.rm = TRUE) %>% # wide -> long
rowid_to_column() %>% # Sequentially number rows
spread(Key, Val, fill = "") %>% # long -> wide
select(-1) # works well # remove row number
# type one two
#1 chocolate x
#2 vanilla x
#3 strawberry x
#4 chocolate x
#5 strawberry x
dat %>%
na_if("") %>% # Replace "" with NA
gather("Key", "Val", -type, na.rm = TRUE) # wide -> long
# type Key Val
#1 chocolate one x
#2 vanilla one x
#3 strawberry one x
#4 chocolate two x
#6 strawberry two x
说明:
na_if("")
将""
条目替换为NA
。gather("Key", "Val", -type, na.rm = TRUE)
将广泛的表格转换为一个长的“键值”表,方法是将条目存储在 type
的所有列<{1>}中的两列Key
中即列名称)和Val
(即条目)。 na.rm = TRUE
会删除NA
个值的行。rowid_to_column
按顺序对行进行编号。spread(Key, Val, fill = "")
将一个长的“键值”表格变成一个宽表格,列数与Key
中的唯一键一样多。条目来自Val
列,如果缺少某个条目,则会填充""
。select(-1)
删除第一列。