gpt4 book ai didi

r - apply 中的 ifelse 语句返回意外结果

转载 作者:行者123 更新时间:2023-12-04 12:32:32 25 4
gpt4 key购买 nike

我正在尝试使用 ifelse内部声明 apply并且得到了奇怪的结果。如果变量 marker,我会得到预期的答案是 1 ,但不是当该变量是 > 9 .

这是我得到正确答案的示例数据集:

my.data <- read.table(text = '
REFNO status stage marker cumulative newstage
1018567 ccc AA 0 1 AA
1018567 aaa NONE 0 1 NONE
1018567 aaa BB 1 1 BB
1018567 bbb CC 1 1 CC
1018567 eee CC 1 1 CC
1018567 mmm CC 1 1 CC
1018567 ppp CC 1 1 CC
1019711 ddd CC 1 1 CC
', header = TRUE, stringsAsFactors = FALSE)

my.data$newstage <- apply(my.data, 1, function(x) ifelse(x['status'] == 'aaa' &
x['stage'] == 'NONE' &
x['marker'] == 0 &
x['cumulative'] > 0, 'BB', x['stage']))

my.data

下面的数据集与上面的数据集只有一个元素不同,但我没有得到正确的答案。
my.data <- read.table(text = '
REFNO status stage marker cumulative newstage
1018567 ccc AA 0 1 AA
1018567 aaa NONE 0 1 NONE
1018567 aaa BB 1 1 BB
1018567 bbb CC 1 1 CC
1018567 eee CC 1 1 CC
1018567 mmm CC 1 1 CC
1018567 ppp CC 1 1 CC
1019711 ddd CC 14 1 CC
', header = TRUE, stringsAsFactors = FALSE)

my.data$newstage <- apply(my.data, 1, function(x) ifelse(x['status'] == 'aaa' &
x['stage'] == 'NONE' &
x['marker'] == 0 &
x['cumulative'] > 0, 'BB', x['stage']))

my.data

谢谢你的任何建议。也许我应该使用 if语句而不是 if-else ?

详细的,请 NONE替换为 BBnewstage在第二行。

最佳答案

如果你看 apply(my.data2, 1, function(x) x) , marker列有两个字符而不是一个。这是因为两位数 14 .对字符的强制使用空格将列填充到其最长(最多字符)元素的长度。这会产生 " 0" == 0在您的代码中,即 FALSE .然而,"0" == 0TRUE

" 0" == 0
# [1] FALSE
"0" == 0
# [1] TRUE

ifelse是矢量化的,你不需要使用 apply根本。您可以使用 within 添加新列(或 with ,如 akrun 所述)或简单地使用 newstage <- ifelse(...)
within(my.data2, {
newStage <- ifelse(status == "aaa" & stage == "NONE" & marker == 0 &
cumulative > 0, "BB", stage)
})
# REFNO status stage marker cumulative newstage newStage
# 1 1018567 ccc AA 0 1 AA AA
# 2 1018567 aaa NONE 0 1 NONE BB
# 3 1018567 aaa BB 1 1 BB BB
# 4 1018567 bbb CC 1 1 CC CC
# 5 1018567 eee CC 1 1 CC CC
# 6 1018567 mmm CC 1 1 CC CC
# 7 1018567 ppp CC 1 1 CC CC
# 8 1019711 ddd CC 14 1 CC CC

关于r - apply 中的 ifelse 语句返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com