我有一个名为notes_count(id)
的函数,它将一个向量作为参数(例如,该函数可以接受不同的参数5,c(1,2,3),6:20或5:1来命名一些)并返回ID和" count"的笔记。我有一个包含以下内容的数据框:
"ID" "Date" "Notes"
每个" ID"包含未知数量的条目例如:
ID Date Notes
1 xxx "This is a note"
1 xxx "More notes here"
...
8 xxx "Hello World"
我遇到的问题是我想要以与输入向量相同的方式对输出进行排序,这意味着notes_count(3:1)应该以相反的顺序列出结果作为数据框:
ID notes_count
1 3 6
2 2 288
3 1 102
并且调用notes_count(1:3)将导致:
ID notes_count
1 1 102
2 2 288
3 3 6
然而,尽管最初给出的顺序,表总是从最小到最大重新排序。有没有办法直接在数据框上执行表,但使用其他函数,以便我可以控制输出。
目前我的代码是:
#Before calling table I have data frame "notes" in the order I want but table reorders it
notes_count <- as.data.frame(table(notes[["ID"]]))
使原始数据框成为表然后将其转换回来似乎很愚蠢。
修改
这是我的代码基本上是按照要求
notes_count <- function(id){
## notes.csv format
## "ID","Date","Notes"
## 1,"2016-01-01","Some notes"
#read the csv to a data frame
notes <- read.csv("notes.csv")
#remove all NA values
notes <- notes[complete.cases(notes), ]
#here is where you can order the data but it won't matter when aggregating the notes to a "count" using table on the next line
notes <- notes[id, ]
#convert the table back to a data frame
notes_count <- as.data.frame(table(notes[["ID"]]))
notes_count
}
答案 0 :(得分:3)
这是一个简单的例子,可以帮助您:
set.seed(1234)
notes <- data.frame(id=sample(2:10,size = 100, replace = TRUE), Note="Some note")
notes_count <- function(id) {
counts <- table(notes[notes$id %in% id,])
return(data.frame(count=counts[as.character(id),]))
}
notes_count(c(10,2,5))
# Results
count
10 8
2 12
5 2
答案 1 :(得分:0)
如果我理解正确,您想通过notes_count变量对数据框进行排序吗?
然后使用order函数并重新调整df行。
your_data_frame[order(your_data_frame$notes_count,decreasing=TRUE),]