2015-04-16 30 views
1

在R,我在我的数据帧以下列...的R - 如何建立一个列表中的字符图案在data.frame列

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

我想将其转换成具有权重的列采用数字通用单位(kgs)。

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

bodyweight_lbs 
1 
0 
0 
1 
... 

我该如何得到这个输出? 当我使用grep('lbs',data$bodyweight)时,它返回整个列中的所有lbs

+0

添加语言标签。 –

+1

它是r .................... –

+0

有关信息,SI单位符号是“kg”,而不是“kgs”。 –

回答

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 

grepl("lbs$", as.character(df$bodyweight))将返回TRUE只有在向量元素包含在最后的子lbs,否则将返回FALSE。通过传递这样的ifelse函数里面,上面的代码会创建一个名为weight_lbs新列,如果在bodyweight列对应的字符串与其他lbs结束,将添加值1这将增加0.1

OR

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

谢谢补充... –

相关问题