我有一些数据,其中每个观察的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
什么是实现它最简单的方法?