ddply / transform不对字符向量的每个元素应用函数

时间:2015-08-30 14:20:36

标签: r dataframe character transform plyr

我有一个数据框,我想通过使用我写的名为" 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; ...

我非常感谢你的帮助!

1 个答案:

答案 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