ฉันมีดาต้าเฟรม:
df <- data.frame(Category = c(rep("A", 3), rep("B", 3)), Value = rnorm(6))
df
Category Value
1 A -0.94968814
2 A 2.56687061
3 A -0.15665153
4 B -0.47647105
5 B 0.83015076
6 B -0.03744522
ตอนนี้ฉันต้องการเพิ่มอีกคอลัมน์ซึ่งเป็นค่าเฉลี่ยต่อหมวดหมู่ สามารถทำได้ด้วยแพ็คเกจ dplyr ง่ายมาก:
df %>% group_by(Category) %>%
summarize(mean = mean(Value))
ตอนนี้ในส่วนของโค้ดปัญหาของฉันคือ: ฉันไม่สามารถใช้ mean(Value)
ได้ แต่ฉันมีชื่อตัวแปรที่รู้ชื่อคอลัมน์: columnName = "Value"
แต่น่าเสียดายที่สิ่งนี้ใช้ไม่ได้:
columnName = "Value"
df %>% group_by(Category) %>%
summarize(mean = mean(columnName))
ข้อความเตือน: 1: ใน mean.default("Value") : อาร์กิวเมนต์ไม่ใช่ตัวเลขหรือตรรกะ: ส่งคืน NA 2: ใน mean.default("Value") :
อาร์กิวเมนต์ไม่ใช่ตัวเลขหรือตรรกะ: ส่งกลับ NA
ฉันจะส่งชื่อคอลัมน์ด้วยตัวแปรได้อย่างไร
mean(df[,columnName])
รหัสนี้ใช้งานได้สำหรับฉัน เมื่อใช้ตัวแปรเดียวกันกับที่คุณทำ - person Benjamin Mohn   schedule 21.12.2016dplyr
แต่ใช้งานได้ดังนี้:tapply(df[,columnName],df$Category, mean)
- person Benjamin Mohn   schedule 21.12.2016set.seed
เมื่อใช้ฟังก์ชันเช่นrnorm
เพื่อสร้างกรอบข้อมูลเพื่อให้เราตรวจสอบผลลัพธ์ได้อีกครั้ง - person Sotos   schedule 21.12.2016vignette("nse")
วิธีหนึ่งในการบรรลุเป้าหมายนี้คือlibrary(lazyeval) ; dots <- interp(~ mean(columnName), columnName = as.name("Value")) ; df %>% group_by(Category) %>% summarise_(.dots = dots)
- person David Arenburg   schedule 21.12.2016