如何将多个列更改为一个列,并在R中具有排名和数字计数?
我有多个列,我想更改为一个列,其中有一个秩和一个计数列。列的行数不均匀如何将多个列更改为一个列,并在R中具有排名和数字计数?,r,unique,lapply,R,Unique,Lapply,我有多个列,我想更改为一个列,其中有一个秩和一个计数列。列的行数不均匀 示例 column 1 | column 2 | column 3 | column 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | | 1 | 2 | | | 1 | | |
示例
column 1 | column 2 | column 3 | column 4 |
1 | 2 | 3 | 4 |
1 | 2 | 3 | |
1 | 2 | | |
1 | | | |
2 | 3 | 4 | 5 |
2 | 3 | 4 | |
2 | 3 | | |
2 | | | |
我想做的是得到一个列,其中包含所有唯一的数字,一个秩和计数列
第1列包含从第1列到第5列的所有唯一编号。它是按排名组织的
排名只是从高计数到低计数-在本例中,2的数字最多,7的数字最少,5的数字最少。所以2是排名第一
计数就是2有7个总数,3有5个总数
Column 1 | Ranking | Count |
2 | 1 | 7 |
3 | 2 | 5 |
1 | 3 | 4 |
4 | 4 | 3 |
5 | 5 | 1 |
我已经试过这个了。但我还有很多工作要做
df <- read.csv("df.csv", header = TRUE, strip.white =TRUE, stringsAsFactors = FALSE)
uniquedel <- unique(df)
write.csv(uniquedel, file = "/Users/uniqueRSA.csv")
df据我所知,您只需将原始矩阵中每个整数值的计数制成表格,而不管它出现在哪个列中。然后按这些计数的秩对表进行排序
# make sample data, like yours
# note your example contains missing/empty cells
df <- data.frame(matrix(sample(1:5, 4*8, replace=T),ncol=4,nrow=8))
# tabulate and rank, note ranks can be fractional in case of ties
tab <- table(unlist(df))
data.frame(tab,rank(tab))[order(rank(tab), decreasing=TRUE),]
Var1 Freq rank.tab.
1 1 3 1.0
4 4 5 2.0
2 2 6 3.0
3 3 9 4.5
5 5 9 4.5
然而,这并不能很好地处理领带
另一种选择是使用以下选项:
data.frame(tab,nrow(tab)-rank(tab))[order(rank(tab),decreasing=TRUE),]
Var1 Freq nrow.tab....rank.tab.
3 3 9 0.5
5 5 9 0.5
2 2 6 2.0
4 4 5 3.0
1 1 3 4.0
使用秩的非标准定义。由于数字位于何处似乎无关紧要,因此可以使用取消列出
仅将所有值作为单个数字向量获取<代码>表格
将为您计算发生次数;您可以将其强制转换为data.frame
以提供所需的三列中的两列。现在可以使用order
创建Ranking
列,但由于它是索引的排列而不是秩,因此需要order
将order
按与行相同的顺序取回。总之,其中df
是原始数据。frame
:
df2 <- data.frame(table(unlist(df)))
df2$Ranking <- order(order(df2$Freq, decreasing = T))
如果您想按排序
,请按顺序(df2$Freq)
对其进行索引。还有很多其他可行的方法rank
将非常有用,除了在base中它只是升序而不是降序,因此也需要一些操作
数据:
df我似乎找不到初始表和最终结果之间的明确关系。请尽量解释清楚你想做什么。提供的代码甚至没有试图解决问题,因此最好您尝试给我们一些代码从何处开始。unlist
df
,然后table
it并应用rank
感谢您的帮助。我添加了一些更多的信息来帮助您理解我要做的事情。rank(-x)
可以用来降序。@thelatemail哦,这太简单了!我现在觉得自己很笨。老实说,我一直在使用dplyr的desc()
helper,但我想保持这一切都是基本的。另外,这让您可以在一行中完成:data.frame(table(unlist(df)),Ranking=rank(-table(unlist(df)),或transform(data.frame(table)(unlist(df)),Ranking=rank(-Freq))
保存两次取消列表/表格。谢谢大家的帮助。。。。。你们能给我一些建议看什么书或者看什么视频。。。我正在努力让自己变得更好R@orthoeng2看看这个网站;很抱歉,我只读过一本关于R/s的书,那就是Venables&Ripley的编程,Springer
df2 <- data.frame(table(unlist(df)))
df2$Ranking <- order(order(df2$Freq, decreasing = T))
> df2
Var1 Freq Ranking
1 1 4 3
2 2 7 1
3 3 5 2
4 4 3 4
5 5 1 5
df <- structure(list(column.1 = c(1, 1, 1, 1, 2, 2, 2, 2), column.2 = c(2,
2, 2, NA, 3, 3, 3, NA), column.3 = c(3, 3, NA, NA, 4, 4, NA,
NA), column.4 = c(4, NA, NA, NA, 5, NA, NA, NA)), .Names = c("column.1",
"column.2", "column.3", "column.4"), row.names = c(NA, -8L), class = "data.frame")