R 在对数据表进行子集时使用case\u
我对R还是新手,我遇到了一个问题。 我有一个包含原始数据的文件:R 在对数据表进行子集时使用case\u,r,datatable,R,Datatable,我对R还是新手,我遇到了一个问题。 我有一个包含原始数据的文件: dfRawData <- data.table( "Model" = c( "Car1", "Car1", "Car1", "Car2", "Car2", "Car2", "Car3", "Car3", "Car3" ), "variable" = c( "Metric1",
dfRawData <-
data.table(
"Model" = c(
"Car1",
"Car1",
"Car1",
"Car2",
"Car2",
"Car2",
"Car3",
"Car3",
"Car3"
),
"variable" = c(
"Metric1",
"Metric2",
"Metric3",
"Metric1",
"Metric2",
"Metric3",
"Metric1",
"Metric2",
"Metric3"
),
"valeur" = c(1, 2, 3, 4, 5, 6, 7, 8, 9)
)
有人知道我做错了什么吗?
这是我的密码:
carName = 'Car1' ##Can be changed
dfCarMetric = case_when(
carName == 'Car1' ~ dfRawData[which(dfRawData[["Model"]] == carName &
dfRawData[["variable"]] %in% c("Metric1", "Metric2")), ],
carName == 'Car2' ~ dfRawData[which(dfRawData[["Model"]] %in% c("Car2", "Car3") &
dfRawData[["variable"]] == "Metric1"), ]
)
最后我想说:
carName = 'Car1'
dfCarMetric
Model variable valeur
1: Car1 Metric1 1
2: Car1 Metric2 2
carName = 'Car2'
dfCarMetric
Model variable valeur
4 Car2 Metric1 4
7 Car3 Metric1 7
非常感谢您的回答 与其使用
case\u当
时(我想象它来自于包dplyr
),不如尝试使用filter
函数,它更适合于子设置数据集
库(dplyr)
图书馆(magrittr)
dfRawData如果要尽量减少条件语句的数量,可以在filter
函数中使用它们,也可以从dplyr
包中使用它们:
dfCarMetric <- dfRawData %>%
filter(
if (carName == "Car1")
Model == carName & variable %in% c("Metric1", "Metric2")
else if (carName == "Car2")
Model %in% c("Car2", "Car3") & variable == "Metric1")
)
如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,那么就更容易为您提供帮助。不要发布数据的图片。我们无法复制/粘贴用于测试的数据。请以纯文本形式包含您数据的代表性样本-。其他用户无法复制/粘贴图像中的数据。但是如果我使用过滤器
功能,我的输出不依赖于carName
…请参阅编辑,其中包括如何将carName
指定为函数的输入,以确定所需的输出。
dfCarMetric <- dfRawData %>%
filter(
if (carName == "Car1")
Model == carName & variable %in% c("Metric1", "Metric2")
else if (carName == "Car2")
Model %in% c("Car2", "Car3") & variable == "Metric1")
)
dfCarMetric <- dfRawData %>%
filter(case_when(
carName == "Car1" ~
Model == carName & variable %in% c("Metric1", "Metric2"),
carName == "Car2" ~
Model %in% c("Car2", "Car3") & variable == "Metric1"
)
)