R - 如何在data.frame列中构建字符模式列表

时间:2015-04-16 08:48:06

标签: r string

在R中,我的数据框中有以下列...

bodyweight  
65lbs  
72kgs  
20kgs  
30lbs  
.
.
.

我想将其转换为权重为数字公共单位(kgs)的列。

已设法使用grep()从列中提取数值,以删除所有非数字字符。但是,要将lbs值转换为kgs,我需要另一列显示lbs所在的所有单元格。所以输出结果如下......

bodyweight_lbs  
1  
0  
0  
1  
...

如何获得此输出? 当我使用grep('lbs',data$bodyweight)时,它会返回整个列中所有lbs的计数。

1 个答案:

答案 0 :(得分:2)

你可以这样做,

> df <- data.frame(bodyweight=c("65lbs", "72kgs", "20kgs", "30lbs"))
> df$weight_lbs <- ifelse(grepl("lbs$", as.character(df$bodyweight)), 1, 0)
> df
  bodyweight weight_lbs
1      65lbs          1
2      72kgs          0
3      20kgs          0
4      30lbs          1
仅当vector元素在最后包含子字符串grepl("lbs$", as.character(df$bodyweight))时,

TRUE才会返回lbs,否则它将返回FALSE。通过在ifelse函数中传递此代码,上面的代码将创建一个名为weight_lbs的新列,如果1列中的相应字符串结束,则会添加值bodyweight使用lbs否则会添加0。

df <- data.frame(bodyweight=c("65lbs", "72kgs", "20kgs", "30lbs"))
df$weight_lbs <- as.numeric(grepl("lbs$", as.character(df$bodyweight)))