ddply/transform 不对字符向量的每个元素应用函数
ddply/transform does not apply function to each element of a character vector
我有一个数据框,我想使用我编写的名为 "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。当输入只是一个字符串时确实会发生这种情况,但是当我尝试在字符向量上应用这个函数时,出了点问题。我尝试使用 "transform" 使其适用于向量中的每个元素:
data_ling_RT2 <- transform(data_ling_RT, Group1 = group1(Code_Trials)))
但是我得到的数据框没有包含一个名为 "Group1" 的新列,它取决于 "Code_Trials" 中的相应元素,我得到 "Group1" 中的所有元素都基于仅在 "Code_Trials" 的第一个元素上。我想这与我写 "group1" 的方式有关,但我找不到我做错了什么。
使用 ddply 更糟糕 - 有时我什至在 "Group1"...
列中什么都得不到
非常感谢您的帮助!
我们仅使用 [[1]]
选择第一个 list
元素。因此,当我们使用 transform
时,第一个被修改的元素会循环到长度
我们可以通过在执行 gsub
之前使用 sapply
提取每个 list
元素的元素元素来更改 group1
函数。目前尚不清楚为什么我们要替换 'Yellow' 因为第二个元素似乎只有 'Blue'.
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
我有一个数据框,我想使用我编写的名为 "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。当输入只是一个字符串时确实会发生这种情况,但是当我尝试在字符向量上应用这个函数时,出了点问题。我尝试使用 "transform" 使其适用于向量中的每个元素:
data_ling_RT2 <- transform(data_ling_RT, Group1 = group1(Code_Trials)))
但是我得到的数据框没有包含一个名为 "Group1" 的新列,它取决于 "Code_Trials" 中的相应元素,我得到 "Group1" 中的所有元素都基于仅在 "Code_Trials" 的第一个元素上。我想这与我写 "group1" 的方式有关,但我找不到我做错了什么。 使用 ddply 更糟糕 - 有时我什至在 "Group1"...
列中什么都得不到非常感谢您的帮助!
我们仅使用 [[1]]
选择第一个 list
元素。因此,当我们使用 transform
时,第一个被修改的元素会循环到长度
我们可以通过在执行 gsub
之前使用 sapply
提取每个 list
元素的元素元素来更改 group1
函数。目前尚不清楚为什么我们要替换 'Yellow' 因为第二个元素似乎只有 'Blue'.
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