6
我有数据,其中每个观察的ID都是以序列形式存储的数字,通常以X:Y的形式存在,但有时会连接列表。我想整理数据,以便每个观察都有自己的行,这样我就可以使用连接函数来添加更多描述性ID。通常我会使用tidyr
中的gather()
函数来完成此操作,但是我无法解开ID,因为它们是字符。基于由冒号和连接向量定义的序列字符串创建长数据格式
的数据是这样的:
example <- data_frame(x = LETTERS[1:3], y = c("Condition 1", "Condition 2", "Condition 3"), z = c("1:3", "4:6", "c(7,9,10)"))
example
# A tibble: 3 × 3
x y z
<chr> <chr> <chr>
1 A Condition 1 1:3
2 B Condition 2 4:6
3 C Condition 3 c(7,9,10)
然而,这些不工作,都产生NA
:
as.numeric("1:3")
as.integer("1:3")
as.numeric("c(7,9,10)")
as.integer("c(7,9,10)")
必须有一个简单的方法来做到这一点,但我觉得一个很长的路可能首先提取数字并将它们存储为列表。对于X:“:”,然后创建从一个号码的顺序其他像这样:Y的ID,我可以通过在劈裂字符串为此
example[1:2,] %>%
+ separate(z, c("a", "b"), sep = ":") %>%
+ mutate(a = as.numeric(a), b = as.numeric(b), new = list(seq(a, b)))
Error in eval(expr, envir, enclos) : 'from' must be of length 1
然而,这没有奏效。
什么我的目标看起来像这样:
# A tibble: 9 × 3
x y z
<chr> <chr> <dbl>
1 A Condition 1 1
2 A Condition 1 2
3 A Condition 1 3
4 B Condition 2 4
5 B Condition 2 5
6 B Condition 2 6
7 C Condition 3 7
8 C Condition 3 9
9 C Condition 3 10
什么是实现它的最简单的方法?
除非你扩展语言,这是一个坏主意来存储代码串。如果您需要为每个观察值存储多个值,请使用列表列。 – alistaire
我同意。这种数据格式来自第三方生物信息学软件包。我可能会对他们的github回购提出建议。 –