【发布时间】:2021-06-09 22:11:39
【问题描述】:
我正在寻找一种简单的方法来确定列中的值是否在其他列中的值范围内。
我的输入如下所示:
ID "Q1 Comm - 01 Scope Thesis" "Q1 Comm - 02 Scope Project" "Q1 Comm - 03 Learn Intern" "Q1 Comm - 04 Biography" "Q1 Comm - Overall Plan"
10 NA NA 4 NA 4
31 2 NA NA NA 2
225 0 NA NA NA 1
243 NA 2 NA 1 0
310 NA 2 NA 1 NA
对于每个唯一的ID,我有兴趣确定Q1 Comm - Overall Plan 列何时是:
1 - Below 所有其他列的min(),或
2 - Above 所有其他列的max(),或
3 - Within 所有其他列的范围
完整的列列表(连同overall 列)如下:
"Q1 Comm - 01 Scope Thesis"
"Q1 Comm - 02 Scope Project"
"Q1 Comm - 03 Learn Intern"
"Q1 Comm - 04 Biography"
"Q1 Comm - 05 Exhibit"
"Q1 Comm - 06 Social Act"
"Q1 Comm - 07 Post Project"
"Q1 Comm - 08 Learn Plant"
"Q1 Comm - 09 Study Narrate"
"Q1 Comm - 10 Learn Participate"
"Q1 Comm - 11 Write 1"
"Q1 Comm - 12 Read 2"
"Q1 Comm - Overall Plan"
我需要的输出是这样的:
ID "Q1 Comm - 01 Scope Thesis" "Q1 Comm - 02 Scope Project" "Q1 Comm - 03 Learn Intern" "Q1 Comm - 04 Biography" "Q1 Comm - Overall Plan" "Q1_check"
10 NA NA 4 NA 4 "within"
31 2 NA NA NA 2 "within"
225 0 NA NA NA 1 "above"
243 NA 2 NA 1 0 "below"
310 NA 2 NA 1 NA NA
我的数据框df 的 dput() 如下。
dput(df)
structure(list(ID = c(10L, 31L, 225L, 243L), Q1.Comm...01.Scope.Thesis = c(NA,
2L, 0L, NA), Q1.Comm...02.Scope.Project = c(NA, NA, NA, 2L),
Q1.Comm...03.Learn.Intern = c(4L, NA, NA, NA), Q1.Comm...04.Biography = c(NA,
NA, NA, 1L), Q1.Comm...Overall.Plan = c(4L, 1L, 2L,
NA), X = c(NA, NA, NA, NA), X.1 = c(NA, NA, NA, NA), X.2 = c(NA,
NA, NA, NA)), class = "data.frame", row.names = c(NA, -4L
))
注意:
我曾在这里Finding if a value is within the range of other columns 提出过这个问题,但示例过于简单,没有一个解决方案适合我。
问题太长了,因此,为了清楚起见,我将其作为一个新问题发布。
感谢您在这篇文章中的时间和帮助。
【问题讨论】:
-
您发布的
dput与您的预期结果不符。 -
谢谢,我已经更新了。它实际上包含与我的原始数据相似的列列表。
-
@Sandy,为一个 Q 做这件事相当容易,但同时为几个 Q 做需要思考。 :) 我应该为这个 dput 发布答案吗?很抱歉,对于您的实际要求,这个问题再次过于简化!
标签: r string range comparison multiple-columns