我有一个数据框,我想通过使用我写的名为" group1"的函数来转换第一列:
group1 <- function(x) {
temp <- strsplit(x,"_")[[1]][2]
temp <- gsub("Yellow", "", temp)
temp <- gsub("Blue", "", temp)
as.numeric(temp)
}
例如,将此函数应用于字符串&#34; MHY_Blue23_Yellow16_11A&#34;应该产生结果23.这确实是当输入只是一个字符串时发生的事情,但是当我尝试在字符向量上应用这个函数时,出现了问题。我尝试使用&#34;转换&#34;使其适用于向量中的每个元素:
data_ling_RT2 <- transform(data_ling_RT, Group1 = group1(Code_Trials)))
但不是使用名为&#34; Group1&#34;的新列获取数据框。这取决于&#34; Code_Trials&#34;中的相应元素,我得到&#34; Group1&#34;中的所有元素。仅基于&#34; Code_Trials&#34;的第一个元素。我想这与我写的方式有关&#34; group1&#34;但是我无法找到我做错的事情。 使用ddply更糟糕 - 有时我甚至不会在专栏中得到任何东西&#34; Group1&#34; ...
我非常感谢你的帮助!
答案 0 :(得分:1)
我们只使用[[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
使用可重现的例子
user_id