คำถามติดแท็ก dplyr

ใช้แท็กนี้สำหรับคำถามเกี่ยวกับฟังก์ชันจากแพ็คเกจ dplyr เช่น group_by สรุปกรองและเลือก

1
dplyr สามารถเข้าร่วมกับหลายคอลัมน์หรือคีย์คอมโพสิตได้หรือไม่?
ฉันตระหนักดีว่าdplyrv3.0 ช่วยให้คุณสามารถเข้าร่วมกับตัวแปรต่างๆได้: left_join(x, y, by = c("a" = "b")จะจับคู่x.aกับy.b อย่างไรก็ตามเป็นไปได้หรือไม่ที่จะเข้าร่วมกับตัวแปรต่างๆหรือฉันต้องเพิ่มคีย์ผสมก่อน? สิ่งนี้: left_join(x, y, by = c("a c" = "b d")เพื่อจับคู่การเชื่อมต่อของ [ x.aและx.c] ถึง [ y.bและy.d]
111 r  dplyr 

5
รวบรวมคอลัมน์หลายชุด
ฉันมีข้อมูลจากแบบสำรวจออนไลน์ที่ผู้ตอบตอบคำถาม 1-3 ครั้ง ซอฟแวร์การสำรวจ (Qualtrics) บันทึกข้อมูลนี้ในหลายคอลัมน์ที่เป็น Q3.2 ในการสำรวจจะมีคอลัมน์Q3.2.1., Q3.2.2.และQ3.2.3.: df <- data.frame( id = 1:10, time = as.Date('2009-01-01') + 0:9, Q3.2.1. = rnorm(10, 0, 1), Q3.2.2. = rnorm(10, 0, 1), Q3.2.3. = rnorm(10, 0, 1), Q3.3.1. = rnorm(10, 0, 1), Q3.3.2. = rnorm(10, 0, 1), Q3.3.3. = rnorm(10, 0, 1) …
109 r  reshape  dplyr  qualtrics  tidyr 

6
กรองสำหรับกรณีที่สมบูรณ์ใน data.frame โดยใช้ dplyr (การลบกรณีที่ชาญฉลาด)
เป็นไปได้ไหมที่จะกรอง data.frame สำหรับกรณีทั้งหมดโดยใช้ dplyr complete.casesด้วยรายการตัวแปรทั้งหมดที่ใช้งานได้แน่นอน แต่นั่นคือ a) verbose เมื่อมีตัวแปรจำนวนมากและ b) เป็นไปไม่ได้เมื่อไม่รู้จักชื่อตัวแปร (เช่นในฟังก์ชันที่ประมวลผล data.frame ใด ๆ ) library(dplyr) df = data.frame( x1 = c(1,2,3,NA), x2 = c(1,2,NA,5) ) df %.% filter(complete.cases(x1,x2))
101 r  dplyr  magrittr 

4
สรุป dplyr: เทียบเท่ากับ“ .drop = FALSE” เพื่อให้กลุ่มที่มีความยาวเป็นศูนย์ในเอาต์พุต
เมื่อใช้summariseกับplyrของddplyฟังก์ชั่นประเภทที่ว่างเปล่าจะลดลงโดยปริยาย .drop = FALSEคุณสามารถเปลี่ยนพฤติกรรมนี้โดยการเพิ่ม อย่างไรก็ตามสิ่งนี้ใช้ไม่ได้เมื่อใช้summariseกับdplyrไฟล์. มีวิธีอื่นในการเก็บหมวดหมู่ว่างไว้ในผลลัพธ์หรือไม่? นี่คือตัวอย่างข้อมูลปลอม library(dplyr) df = data.frame(a=rep(1:3,4), b=rep(1:2,6)) # Now add an extra level to df$b that has no corresponding value in df$a df$b = factor(df$b, levels=1:3) # Summarise with plyr, keeping categories with a count of zero plyr::ddply(df, "b", summarise, count_a=length(a), .drop=FALSE) b count_a 1 …
101 r  dplyr  plyr  tidyr 

6
รวมในหลายคอลัมน์ด้วย dplyr
dplyrคำถามของฉันที่เกี่ยวข้องกับข้อสรุปถึงค่าในหลายคอลัมน์ของกรอบข้อมูลและการสร้างคอลัมน์ใหม่ที่สอดคล้องกับผลบวกนี้โดยใช้ รายการข้อมูลในคอลัมน์เป็นไบนารี (0,1) ฉันคิดของอนาล็อกแถวที่ชาญฉลาดของsummarise_eachหรือการทำงานของmutate_each dplyrด้านล่างนี้เป็นตัวอย่างขั้นต่ำของ data frame: library(dplyr) df=data.frame( x1=c(1,0,0,NA,0,1,1,NA,0,1), x2=c(1,1,NA,1,1,0,NA,NA,0,1), x3=c(0,1,0,1,1,0,NA,NA,0,1), x4=c(1,0,NA,1,0,0,NA,0,0,1), x5=c(1,1,NA,1,1,1,NA,1,0,1)) > df x1 x2 x3 x4 x5 1 1 1 0 1 1 2 0 1 1 0 1 3 0 NA 0 NA NA 4 NA 1 1 1 1 5 0 1 1 0 …
98 r  dplyr 

8
R dplyr: วางหลายคอลัมน์
ฉันมี dataframe และรายการคอลัมน์ใน dataframe ที่ฉันต้องการทิ้ง ลองใช้irisชุดข้อมูลเป็นตัวอย่าง ฉันต้องการที่จะลดลงSepal.LengthและSepal.Widthและใช้เฉพาะคอลัมน์ที่เหลือ ฉันจะทำสิ่งนี้โดยใช้selectหรือselect_จากdplyrแพ็คเกจได้อย่างไร? นี่คือสิ่งที่ฉันได้ลองทำแล้ว: drop.cols <- c('Sepal.Length', 'Sepal.Width') iris %>% select(-drop.cols) ข้อผิดพลาดใน -drop.cols: อาร์กิวเมนต์ไม่ถูกต้องสำหรับตัวดำเนินการยูนารี iris %>% select_(.dots = -drop.cols) ข้อผิดพลาดใน -drop.cols: อาร์กิวเมนต์ไม่ถูกต้องสำหรับตัวดำเนินการยูนารี iris %>% select(!drop.cols) เกิดข้อผิดพลาดใน! drop.cols: ประเภทอาร์กิวเมนต์ไม่ถูกต้อง iris %>% select_(.dots = !drop.cols) เกิดข้อผิดพลาดใน! drop.cols: ประเภทอาร์กิวเมนต์ไม่ถูกต้อง ฉันรู้สึกว่าฉันพลาดอะไรบางอย่างที่ชัดเจนเพราะสิ่งเหล่านี้ดูเหมือนเป็นการดำเนินการที่มีประโยชน์ซึ่งควรมีอยู่แล้ว ใน Github มีคนโพสต์ปัญหาที่คล้ายกันและ Hadley บอกว่าให้ใช้ 'การสร้างดัชนีเชิงลบ' นั่นคือสิ่งที่ (ฉันคิด) …
97 r  dplyr 

6
dplyr:“ ข้อผิดพลาดใน n (): ไม่ควรเรียกใช้โดยตรง”
ฉันกำลังพยายามทำซ้ำตัวอย่างหนึ่งในแพ็คเกจ dplyr แต่ได้รับข้อความแสดงข้อผิดพลาดนี้ ฉันคาดหวังว่าจะเห็นคอลัมน์ n ใหม่ที่สร้างขึ้นพร้อมความถี่ของการรวมกันแต่ละชุด ฉันขาดอะไรไป? ฉันตรวจสอบสามครั้งว่าโหลดแพคเกจแล้ว library(dplyr) # summarise peels off a single layer of grouping by_vs_am <- group_by(mtcars, vs, am) by_vs <- summarise(by_vs_am, n = n()) ข้อผิดพลาดใน n (): ไม่ควรเรียกใช้ฟังก์ชันนี้โดยตรง

5
R การประเมินตามเงื่อนไขเมื่อใช้ตัวดำเนินการท่อ%>%
เมื่อใช้ประกอบท่อ%>%กับแพคเกจเช่นdplyr, ggvis, dychartsฯลฯ ทำวิธีที่ผมทำขั้นตอนเงื่อนไข? ตัวอย่างเช่น; step_1 %>% step_2 %>% if(condition) step_3 วิธีการเหล่านี้ดูเหมือนจะไม่ได้ผล: step_1 %>% step_2 if(condition) %>% step_3 step_1 %>% step_2 %>% if(condition) step_3 มีทางยาว: if(condition) { step_1 %>% step_2 }else{ step_1 %>% step_2 %>% step_3 } มีวิธีที่ดีกว่าโดยไม่ต้องใช้ความซ้ำซ้อนทั้งหมดหรือไม่?
94 r  dplyr  ggvis  magrittr 

6
รับค่าสูงสุดตามกลุ่ม
นี่คือกรอบข้อมูลตัวอย่าง: d <- data.frame( x = runif(90), grp = gl(3, 30) ) ฉันต้องการย่อยของdที่มีแถวกับด้านบน 5 ค่าสำหรับค่าของแต่ละxgrp การใช้ฐาน -R แนวทางของฉันจะเป็นดังนี้: ordered <- d[order(d$x, decreasing = TRUE), ] splits <- split(ordered, ordered$grp) heads <- lapply(splits, head) do.call(rbind, heads) ## x grp ## 1.19 0.8879631 1 ## 1.4 0.8844818 1 ## 1.12 0.8596197 1 …
93 r  data.table  dplyr 

4
dplyr บน data.table ฉันใช้ data.table จริงหรือ
ถ้าฉันใช้ไวยากรณ์dplyrกับdatatableฉันจะได้รับประโยชน์ด้านความเร็วทั้งหมดของ datatable ในขณะที่ยังใช้ไวยากรณ์ของ dplyr หรือไม่ กล่าวอีกนัยหนึ่งฉันใช้ datatable ผิดหรือไม่หากฉันค้นหาด้วยไวยากรณ์ dplyr หรือฉันจำเป็นต้องใช้ไวยากรณ์ที่สามารถจัดเก็บข้อมูลได้อย่างแท้จริงเพื่อควบคุมพลังทั้งหมดของมัน ขอบคุณล่วงหน้าสำหรับคำแนะนำใด ๆ ตัวอย่างรหัส: library(data.table) library(dplyr) diamondsDT <- data.table(ggplot2::diamonds) setkey(diamondsDT, cut) diamondsDT %>% filter(cut != "Fair") %>% group_by(cut) %>% summarize(AvgPrice = mean(price), MedianPrice = as.numeric(median(price)), Count = n()) %>% arrange(desc(Count)) ผล: # cut AvgPrice MedianPrice Count # 1 Ideal 3457.542 1810.0 …
92 r  data.table  dplyr 

2
วิธีระบุชื่อคอลัมน์สำหรับ x และ y เมื่อเข้าร่วมใน dplyr
ฉันมีเฟรมข้อมูลสองเฟรมที่ฉันต้องการเข้าร่วมโดยใช้ dplyr หนึ่งคือกรอบข้อมูลที่มีชื่อ test_data <- data.frame(first_name = c("john", "bill", "madison", "abby", "zzz"), stringsAsFactors = FALSE) กรอบข้อมูลอื่นประกอบด้วยคลังข้อมูลชื่อ Kantrowitz รุ่นที่ล้างแล้วโดยระบุเพศ นี่คือตัวอย่างเล็กน้อย: kantrowitz <- structure(list(name = c("john", "bill", "madison", "abby", "thomas"), gender = c("M", "either", "M", "either", "M")), .Names = c("name", "gender"), row.names = c(NA, 5L), class = c("tbl_df", "tbl", "data.frame")) โดยพื้นฐานแล้วฉันต้องการค้นหาเพศของชื่อจากtest_dataตารางโดยใช้kantrowitzตาราง เนื่องจากฉันจะสรุปสิ่งนี้เป็นฟังก์ชันencode_genderฉันจึงไม่รู้ชื่อคอลัมน์ในชุดข้อมูลที่จะใช้ดังนั้นฉันจึงไม่สามารถรับประกันได้ว่าจะเป็นnameเช่นkantrowitz$nameนั้น …
91 r  join  left-join  dplyr 

3
dplyr กลายพันธุ์ด้วยค่าเงื่อนไข
ในดาต้าเฟรมขนาดใหญ่ ("myfile") ที่มีสี่คอลัมน์ฉันต้องเพิ่มคอลัมน์ที่ห้าโดยมีค่าตามเงื่อนไขตามสี่คอลัมน์แรก ต้องการคำตอบที่มีdplyrและmutateส่วนใหญ่เป็นเพราะความเร็วในชุดข้อมูลขนาดใหญ่ ดาต้าเฟรมของฉันมีลักษณะดังนี้: V1 V2 V3 V4 1 1 2 3 5 2 2 4 4 1 3 1 4 1 1 4 4 5 1 3 5 5 5 5 4 ... ค่าของคอลัมน์ที่ห้า (V5) ขึ้นอยู่กับกฎเงื่อนไขบางประการ: if (V1==1 & V2!=4) { V5 <- 1 } else if (V2==4 …
88 r  dplyr  mutate 

12
dplyr กลายพันธุ์ / แทนที่หลายคอลัมน์ในชุดย่อยของแถว
ฉันอยู่ระหว่างการลองใช้เวิร์กโฟลว์ที่ใช้ dplyr (แทนที่จะใช้ data.table ส่วนใหญ่ซึ่งฉันเคยชิน) และฉันเจอปัญหาที่ฉันไม่สามารถหาโซลูชัน dplyr ที่เทียบเท่าได้ . ฉันมักจะพบกับสถานการณ์ที่ฉันต้องอัปเดต / แทนที่หลายคอลัมน์ตามเงื่อนไขตามเงื่อนไขเดียว นี่คือตัวอย่างโค้ดพร้อมโซลูชัน data.table ของฉัน: library(data.table) # Create some sample data set.seed(1) dt <- data.table(site = sample(1:6, 50, replace=T), space = sample(1:4, 50, replace=T), measure = sample(c('cfl', 'led', 'linear', 'exit'), 50, replace=T), qty = round(runif(50) * 30), qty.exit = 0, …
86 r  data.table  dplyr 

7
วิธีแทนที่ NA ด้วยชุดของค่า
ฉันมีกรอบข้อมูลต่อไปนี้: library(dplyr) library(tibble) df <- tibble( source = c("a", "b", "c", "d", "e"), score = c(10, 5, NA, 3, NA ) ) df ดูเหมือนว่านี้: # A tibble: 5 x 2 source score <chr> <dbl> 1 a 10 . # current max value 2 b 5 3 c NA 4 d …
18 r  dplyr  tibble 

3
การใช้การประเมินที่ไม่ได้มาตรฐานตามระเบียบในการถอดรหัสในด้านขวามือของการกลายพันธุ์
ลองพิจารณาดูซิว่าแต่ละคอลัมน์เป็นเวกเตอร์ของตัวละครที่สามารถมีค่าได้มากมายสมมติว่า "A" ถึง "F" library(tidyverse) sample_df <- tibble(q1 = c("A", "B", "C"), q2 = c("B", "B", "A")) ฉันต้องการสร้างฟังก์ชั่นที่ใช้ชื่อคอลัมน์เป็นอาร์กิวเมนต์และ recodes คอลัมน์นั้นเพื่อให้คำตอบ "A" ใด ๆ กลายเป็น NA และ df จะถูกส่งกลับตามที่เป็นอยู่ เหตุผลในการออกแบบด้วยวิธีนี้คือเพื่อให้พอดีกับไปป์ไลน์ที่กว้างขึ้นที่ดำเนินการชุดของการดำเนินงานโดยใช้คอลัมน์ที่กำหนด มีหลายวิธีในการทำเช่นนี้ แต่ฉันสนใจที่จะเข้าใจว่าวิธีที่ดีที่สุดในการใช้สำนวน tidy_eval / tidyverse อันดับแรกชื่อคำถามต้องอยู่ทางด้านซ้ายของกริยากลายพันธุ์ดังนั้นเราจึงใช้!!และ:=ตัวดำเนินการอย่างเหมาะสม แต่แล้วจะวางอะไรไว้ทางด้านขวามือ? fix_question <- function(df, question) { df %>% mutate(!!question := recode(... something goes here...)) } …
13 r  dplyr  rlang  tidyeval  nse 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.