gpt4 book ai didi

r - ddply/transform 不会将函数应用于字符向量的每个元素

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

我有一个数据框,我想使用我编写的名为“group1”的函数转换第一列:

group1 <- function(x) {
temp <- strsplit(x,"_")[[1]][2]
temp <- gsub("Yellow", "", temp)
temp <- gsub("Blue", "", temp)
as.numeric(temp)
}

例如,在字符串“MHY_Blue23_Yellow16_11A”上应用这个函数应该产生结果 23。当输入只是一个字符串时确实会发生这种情况,但是当我尝试在字符向量上应用这个函数时,出现了问题.我尝试使用“转换”使其适用于向量中的每个元素:

data_ling_RT2 <- transform(data_ling_RT, Group1 = group1(Code_Trials)))

但是我没有得到一个数据框,它有一个名为“Group1”的新列,它取决于“Code_Trials”中的相应元素,我得到“Group1”中的所有元素仅基于“Code_Trials”的第一个元素”。我想这与我写“group1”的方式有关,但我找不到我做错了什么。使用 ddply 更糟糕 - 有时我什至在“Group1”列中什么都得不到...

非常感谢您的帮助!

最佳答案

我们只选择第一个 list使用 [[1]] 元素.所以,当我们使用 transform ,第一个被修改的元素循环到长度。

我们可以改变group1通过提取每个 list 的元素元素来实现功能元素使用 sapply在做 gsub 之前.目前尚不清楚为什么我们要替换“黄色”,因为第二个元素似乎只有“蓝色”。

 group1 <- function(x) {
temp <- strsplit(x,"_")
temp <- sapply(temp, '[', 2)
temp <- gsub("Yellow", "", temp)
temp <- gsub("Blue", "", temp)
as.numeric(temp)
}

上面的代码可以简化为

 group2 <- function(x) {
temp <- strsplit(x,"_")
temp <- sapply(temp, '[', 2)
temp <- as.numeric(gsub('\\D+', '', temp))
}

使用可重现的例子

 data_ling_RT <- data.frame(Code_Trials= c("MHY_Blue23_Yellow16_11A" , 
"MHY_Blue24_Yellow16_11A"), stringsAsFactors=FALSE)
transform(data_ling_RT, Group1 = group1(Code_Trials))
# Code_Trials Group1
#1 MHY_Blue23_Yellow16_11A 23
#2 MHY_Blue24_Yellow16_11A 24

关于r - ddply/transform 不会将函数应用于字符向量的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297505/

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