gpt4 book ai didi

r - 根据由冒号和连接向量定义的序列字符串创建长数据格式

转载 作者:行者123 更新时间:2023-12-04 13:46:27 24 4
gpt4 key购买 nike

我有数据,其中每个观测值的ID是通常以X:Y形式存储为序列的数字,但有时是串联列表。我想整理数据,以便每个观察都有自己的行,这样我就可以使用联接函数添加更多描述性ID。通常,我会使用gather()中的tidyr函数来执行此操作,但是由于它们是字符,因此在解压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

实现它的最简单方法是什么?

最佳答案

我们可以使用tidyverse

library(tidyverse)
example %>%
group_by(x) %>%
mutate(z = list(eval(parse(text=z)))) %>%
unnest
# 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

关于r - 根据由冒号和连接向量定义的序列字符串创建长数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com