在R中使用表的替代方法?

时间:2016-02-29 02:53:46

标签: r

我有一个名为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
}

2 个答案:

答案 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),]