我正在尝试使用R自动化一个过程,这样它就可以用新数据快速完成。我有一个数据框,它有一个空的标签列,它可以有4个标签,基于列1中的值的大小。
我现在有这个
testdata <- as.data.frame(document)
COL1 <- testdata$COL1
Label <- testdata$Label
for(i in 1:length(COL1)){
if(i > 25){
Label <- "Label 1"
} else if(i <= 25){
Label <- "Label 2"
} else if(i <= 15){
Label <- "Label 3"
} else if (i < 7){
Label <-" Label 4"
}
}我遇到的问题是,整个列都是以"Label 1“(i> 25数据标签)填充的,无论我将它们放在哪种顺序中,它们都是用"Label 1”填充的。
我假设i> 25语句有错误,但我看不到它。
谢谢你
发布于 2021-05-10 21:46:51
我认为如果你使用case_when类型的函数,这一点会更清楚,它基本上是一个if else语句链。
library(tidyverse)
testdata %>%
mutate(filter_col = case_when(
COL1 <= 7 ~ "Label 4",
COL1 <= 15 ~ "Label 3",
COL1 <= 25 ~ "Label 2",
COL1 > 25 ~ "Label 1",
)
)发布于 2021-05-10 21:39:19
也许避免使用循环会让它更安全,更不容易出错?
testdata$Label[COL1 > 0] = 'Label 4'
testdata$Label[COL1 > 6] = 'Label 3'
testdata$Label[COL1 > 15] = 'Label 2'
testdata$Label[COL1 > 25] = 'Label 1'
``发布于 2021-05-10 21:43:47
问题是i只是反映行号(顺序),而不是COL1的值
有几种方法可以做到这一点,但我尝试了一些向量化的方法,如下所示:
ifelse(testdata$COL1 > 25,
"Label 1",
ifelse(testdata$COL1 <= 2,
"Label 2",
ifelse(testdata$COL1<= 15,
"Label 3",
ifelse(testdata$COL1 < 7,
"Label 4",
"")
)
)
)https://stackoverflow.com/questions/67471482
复制相似问题