在R中,我的数据框中有以下列...
bodyweight
65lbs
72kgs
20kgs
30lbs
.
.
.
我想将其转换为权重为数字公共单位(kgs)的列。
已设法使用grep()
从列中提取数值,以删除所有非数字字符。但是,要将lbs
值转换为kgs
,我需要另一列显示lbs
所在的所有单元格。所以输出结果如下......
bodyweight_lbs
1
0
0
1
...
如何获得此输出?
当我使用grep('lbs',data$bodyweight)
时,它会返回整个列中所有lbs
的计数。
答案 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)))