gpt4 book ai didi

r - 方括号多列 R

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

我很困惑。我试图根据两列中的值隔离 df 的某些行。一如既往,我首先在实践数据中尝试这个。我的代码工作正常。

data1<-df2[df2$fruit=="kiwi" |  df2$fruit=="orange" | df2$fruit=="apple"  & (df2$dates>= "2010-04-01" & df2$dates<  "2010-10-01"), ]

当我在我的真实数据上尝试相同的代码时,它不起作用。它收集我需要的“水果”,但忽略了我的日期范围请求。

 data1<-lti_first[lti_first$hai_atc=="C10AA01" | lti_first$hai_atc=="C10AA03" | lti_first$hai_atc=="C10AA04" | lti_first$hai_atc=="C10AA05" | lti_first$hai_atc=="C10AA07" | lti_first$hai_atc=="C10AB02" |lti_first$hai_atc=="C10AA04" |lti_first$hai_atc=="C10AB08" | lti_first$hai_atc=="C10AX09" & (lti_first$date_of_claim >= "2010-04-01" & lti_first$date_of_claim<"2010-10-01"), ]

我的练习数据和真实数据中的变量结构完全相同。 Fruits/hai_atc 是两个 df 中的因子,日期是两个 df 中的 as.Dates。

为了解决这个问题,我尝试过对数据进行子集化,但这对我也不起作用(但对练习数据有效)

x<-subset(lti_first, hai_atc=="V07AY03" | hai_atc=="A11JC94" & (date_of_claim>="2010-04-01" & date_of_claim<"2010-10-01"))

我做错了什么?对我来说,我的代码看起来完全一样!

样本 df

names<-c("tom", "mary", "tom", "john", "mary",
"tom", "john", "mary", "john", "mary", "tom", "mary", "john", "john")
dates<-as.Date(c("2010-02-01", "2010-05-01", "2010-03-01",
"2010-07-01", "2010-07-01", "2010-06-01", "2010-09-01",
"2010-07-01", "2010-11-01", "2010-09-01", "2010-08-01",
"2010-11-01", "2010-12-01", "2011-01-01"))
fruit<-as.character(c("apple", "orange", "banana", "kiwi",
"apple", "apple", "apple", "orange", "banana", "apple",
"kiwi", "apple", "orange", "apple"))
age<-as.numeric(c(60,55,60,57,55,60,57,55,57,55,60,55, 57,57))
sex<-as.character(c("m","f","m","m","f","m","m",
"f","m","f","m","f","m", "m"))
df2<-data.frame(names,dates, age, sex, fruit)
df2


dput(df2)
structure(list(names = structure(c(3L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 1L, 2L, 3L, 2L, 1L, 1L), .Label = c("john", "mary", "tom"
), class = "factor"), dates = structure(c(14641, 14730, 14669,
14791, 14791, 14761, 14853, 14791, 14914, 14853, 14822, 14914,
14944, 14975), class = "Date"), age = c(60, 55, 60, 57, 55, 60,
57, 55, 57, 55, 60, 55, 57, 57), sex = structure(c(2L, 1L, 2L,
2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L), .Label = c("f",
"m"), class = "factor"), fruit = structure(c(1L, 4L, 2L, 3L,
1L, 1L, 1L, 4L, 2L, 1L, 3L, 1L, 4L, 1L), .Label = c("apple",
"banana", "kiwi", "orange"), class = "factor")), .Names = c("names",
"dates", "age", "sex", "fruit"), row.names = c(NA, -14L), class = "data.frame")

**真实数据太大而无法放入 dput,这里用一个 str 代替

str(sample_lti_first)
'data.frame': 20 obs. of 5 variables:
$ hai_dispense_number: Factor w/ 53485 levels "Patient HAI0000017",..: 22260 22260 2527 24311 24311 24311 24311 13674 13674 13674 ...
$ sex : Factor w/ 4 levels "F","M","U","X": 2 2 2 1 1 1 1 1 1 1 ...
$ hai_age : int 18 18 27 40 40 40 40 28 28 28 ...
$ date_of_claim : Date, format: "2009-10-09" "2009-10-09" "2009-10-18" ...
$ hai_atc : Factor w/ 1038 levels "","A01AA01","A01AB03",..: 144 76 859 80 1009 1009 859 81 1008 859 ...

最佳答案

我认为扩展@Aaron 的评论很重要。您遇到的问题是由于使用 %in% 避免的所有 OR 语句周围缺少括号引起的,而不是 OR 语句在提取函数 [。你的玩具示例实际上并没有完全按照你想要的方式工作 - 有一个日期为 2010-12-01orange 水果。没有出现其他问题纯属偶然。

这段代码中 bool 逻辑的读取方式

df2[df2$fruit=="kiwi" |  df2$fruit=="orange" | df2$fruit=="apple"  & (df2$dates>= "2010-04-01" & df2$dates<  "2010-10-01"), ]

是:

I want all rows of df2 where fruit is kiwi, all rows where fruit is orange, and all rows where fruit is apple and the dates are between 3/31/2010 and 10/1/2010.

这就是您得到的 - 只有苹果被截断到适当的日期范围。 toy 数据集中实际上没有超出日期范围的猕猴桃。

现在添加一对括号:

df2[(df2$fruit=="kiwi" |  df2$fruit=="orange" | df2$fruit=="apple")  & (df2$dates >= "2010-04-01" & df2$dates <  "2010-10-01"), ]

这段代码说:

I want all the rows of df2 where fruit is either kiwi, orange, or apple and the dates are between 3/31/2010 and 10/1/2010.

综上所述,%in% 绝对是正确的选择。

关于r - 方括号多列 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983708/

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