gpt4 book ai didi

R:将 df 中列表的第一个元素提取到新的简化 df 中

转载 作者:行者123 更新时间:2023-12-02 18:29:58 24 4
gpt4 key购买 nike

我有一些来自仪器的原始数据,我需要对其进行调整,以便我可以使用它。我想这很容易修复,但我需要一些帮助。

df 看起来像这样:

date <-c("Date1","Date2","Date3")

data <-c("1,234,567,2345;2,345,5677,256;3,576,345,3456", "1,564,567,2345;2,745,5677,256;3,577,345,8456", "1,234,567,2345;2,345,5677,256,;3,555,345,3456;....")

df<-data.frame(date, data)

因此,对于每个日期,都有尺寸等级(1,2 或 3..)以及三个相应的测量值/值,由“,”分隔。不同的尺寸等级由“;”分隔。现在我想访问每个尺寸等级的第一个值并将其转移到一个新的 df 中。所以这应该是这样的:

date<-c("Date1","Date2","Date3")
data_sizeclass_1<-c(234,564,234)
data_sizeclass_2<-c(345,745,345)
data_sizeclass_3<-c(576,577,555)

df<-data.frame(date,data_sizeclass_1,data_sizeclass_2,data_sizeclass_3)

我希望这是有道理的。

到目前为止,我设法将数据列分成单独的列(使用 cSplit)。我将能够将这些列组合成一个新的 df,但随后我必须手动选择每一列,而且由于我有 200 多个大小类别,这将是一项繁重的工作。我想找到一种解决方案,直接将其中一个测量值直接提取到新的 df 中。感谢您的帮助。

最佳答案

这个有用吗?

library(tidyr)
library(dplyr)
library(stringr)
df %>%
# first get rid of digit at string beginning and, respectively, after semi-colon:
mutate(data = gsub("^\\d,|(?<=;)\\d,", "", data, perl = TRUE)) %>%
# separate into columns using semi-colon as separator:
separate(data,
into = paste0("data_sizeclass_", 1:3),
sep = ";",
convert = TRUE) %>%
# finally extract the initial numbers in the new columns:
mutate(across(c(-date), ~ str_extract(., "\\d+")))
date data_sizeclass_1 data_sizeclass_2 data_sizeclass_3
1 Date1 234 345 576
2 Date2 564 745 577
3 Date3 234 345 555

关于R:将 df 中列表的第一个元素提取到新的简化 df 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69554381/

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