मैं दो श्रेणीबद्ध स्तंभों की शर्तों के आधार पर एक सतत स्तंभ से मूल्यों को कम करना चाहता हूं।
> df.example <- data.frame(V1 = c("A", "A", "A", "B", "B", "B", "A", "A", "B", "B"),
+ V2 = c("B", "A", "B", "A", "B", "A", "B", "A", "B", "A"),
+ V3 = c("5", "3", "1", "7", "11", "2", "2", "11", "1", "3"))
> df.example
V1 V2 V3
1 A B 5
2 A A 3
3 A B 1
4 B A 7
5 B B 11
6 B A 2
7 A B 2
8 A A 11
9 B B 1
10 B A 3
Df.example से मैं उन पंक्तियों को पुनः प्राप्त करना चाहूंगा जहां V1 = V2 के प्रत्येक अद्वितीय संयोजन के लिए V3 अधिकतम है; यहां
5 B B 11
8 A A 11
और प्रत्येक अद्वितीय संयोजन के लिए न्यूनतम जब V1=/V2; यहां
3 A B 1
10 B A 3
यह निश्चित रूप से सरल है, मेरे डेटा फ़्रेम में V1 और V2 में 100 श्रेणियां हैं।
3
Thijs van den Burg
23 मार्च 2020, 18:31
3 जवाब
यहाँ एक डेटा.टेबल दृष्टिकोण है।
library(data.table)
setDT(df.example)
#In supplied data, V3 is a character vector
df.example[,V3 := as.numeric(as.matrix(V3))]
df.example[,lapply(.SD,function(x){
if(V1==V2)
{max(V3)}
else
{min(V3)}})
,by=list(V1,V2)]
V1 V2 V3
1: A B 1
2: A A 11
3: B A 2
4: B B 11
2
Ian Campbell
23 मार्च 2020, 18:51
एक अन्य विकल्प:
library(dplyr)
df.example %>%
group_by(V1, V2) %>%
filter(V3 == eval(parse(text = paste0(c('max', 'min')[(V1 != V2) + 1], '(V3)'))))
आउटपुट:
# A tibble: 4 x 3
# Groups: V1, V2 [4]
V1 V2 V3
<chr> <chr> <int>
1 A B 1
2 B B 11
3 B A 2
4 A A 11
या dplyr
में @IanCampbell के समान:
library(dplyr)
df.example %>%
group_by(V1, V2) %>%
filter(if (V1 != V2) V3 == min(V3) else V3 == max(V3))
यदि आपका V3
वास्तव में integer
नहीं है, तो बस mutate(V3 = as.integer(as.character(V3))) %>%
को दूसरे चरण के रूप में जोड़ें।
1
arg0naut91
23 मार्च 2020, 18:59
dplyr
का उपयोग करने वाली एक संभावना यह हो सकती है:
df.example %>%
filter(V1 == V2) %>%
group_by(V1, V2) %>%
summarise_all(max) %>%
bind_rows(df.example %>%
filter(V1 != V2) %>%
group_by(V1, V2) %>%
summarise_all(min))
V1 V2 V3
<fct> <fct> <dbl>
1 A A 11
2 B B 11
3 A B 1
4 B A 2
0
tmfmnk
23 मार्च 2020, 18:38
eval(parse())
की वास्तव में अनुशंसा नहीं की जाती है, इसलिए इसका उपयोग stackoverflow.com/questions/13649979/…