我有一个非常大的数据集,其中包括两列权重和权重单位。现在我想根据单位列上显示的内容将所有权重转换为千克。以下是数据帧看起来像的样子
x <- data.frame("SN" = 1:3, "weights" = c(2.1,1500, 2500), "Units" = c("Kilograms","Grams", "Grams"))
所以我想写一个代码,看看单位列,一旦它看到克,它就会自动将重量列中的重量转换为千克
以下是的预期结果
x <- data.frame("SN" = 1:3, "weights" = c(2.1,1.5, 2.5), "Units" = c("Kilograms","Kilograms", "Kilograms"))
x
请帮助
您可以通过对x$weights
中的值进行x$Units == "Grams"
切片来访问和替换克值,然后将"克"替换为"千克"。类似这样的东西:
x$weights[x$Units == "Grams"] <- x$weights[x$Units == "Grams"] / 1000
x$Units <- "Kilograms"
或者,您可以将dplyr的mutate
与ifelse
:一起使用
library(dplyr)
x %>%
mutate(weights = ifelse(Units == "Grams", weights / 1000, weights),
Units = "Kilograms"
)
输出:
SN weights Units
1 1 2.1 Kilograms
2 2 1.5 Kilograms
3 3 2.5 Kilograms
使用data.table
library(data.table)
setDT(x)[Units == "Grams",c("weights", "Units"):=list(weights/1000, "Kilograms")]
x
# SN weights Units
#1: 1 2.1 Kilograms
#2: 2 1.5 Kilograms
#3: 3 2.5 Kilograms
基本R:
kilo_df <- within(df, {weights <- ifelse(Units != "Kilograms", weights / 1000, weights)
Units <- as.character("Kilograms")})