好吧,我陷入了一个愚蠢的循环中.我已经阅读了如何通过列对数据框进行排序的有用想法?,但还需要一个提示.我想要一个带有任意列数的矩阵的函数,并按顺序对所有列进行排序.例如,对于foo具有N列的矩阵,相当于foo[order(foo[,1],foo[,2],...foo[,N]),].我很乐意使用with或by构造,并在必要时定义colnames我的矩阵,但我无法弄清楚如何自动收集order(或with)的参数.或者,我应该说,我可以用它paste然后构建整个血腥的字符串call,但我确信有一种更简单的方法.
我想c按字母顺序排序if x[i]== x[i+1]。我使用了order()函数,但它也改变了x列。我想订购整行:
best <- function(state){
HospitalName<-vector()
StateName<-vector()
HeartAttack<-vector()
k<-1
outcome<-read.csv("outcome-of-care-measures.csv",colClasses= "character")
temp<-(outcome[,c(2,7,11,17,23)])
for (i in 1:nrow(temp)){
if(identical(state,temp[i,2])==TRUE){
HospitalName[k]<-temp[i,1]
StateName[k]<-temp[i,2]
HeartAttack[k]<-as.numeric(temp[i,4])
k<-k+1
}}
frame<-data.frame(cbind(HospitalName,StateName,HeartAttack))
library(dplyr)
frame %>%
group_by(as.numeric(as.character(frame[,3]))) %>%
arrange(frame[,1])
}
Output:
HospitalName StateName HeartAttack
1 FORT DUNCAN MEDICAL CENTER TX 8.1
2 TOMBALL REGIONAL MEDICAL CENTER TX 8.5
3 CYPRESS FAIRBANKS MEDICAL CENTER TX 8.7
4 DETAR HOSPITAL NAVARRO TX 8.7
5 METHODIST HOSPITAL,THE TX 8.8
6 MISSION REGIONAL MEDICAL CENTER …Run Code Online (Sandbox Code Playgroud) 我试图在R中的一行中执行多个步骤,以从具有多个条件的data.table(dt)中选择值.
例如:
set.seed(123)
dt <- data.table(id = rep(letters[1:2],2),
time = rnorm(4),
value = rnorm(4)*100)
# id time value
# 1: a -0.56047565 12.92877
# 2: b -0.23017749 171.50650
# 3: a 1.55870831 46.09162
# 4: b 0.07050839 -126.50612
# Now I want to select the last (maximum time) value from id == "a"
# My pseudo data.table code looks like this
dt[order(time) & id == "a" & .N, value]
# [1] 12.92877 46.09162
Run Code Online (Sandbox Code Playgroud)
而不是获取我想要的两个值只有最后一个值(具有更高的时间值).
如果我一步一步地做到这一点:
dt <- dt[order(time) & id …Run Code Online (Sandbox Code Playgroud) 我想根据特定的简单模式重新排序我的数据。
我只想重新排列我的数据,其中一行Female,一行Male,依次保留householdid。
数据如下:
householdid.x idno isex iage
1 101366 1013661 FEMALE 29
2 101366 1013662 MALE 36
3 102481 1024812 MALE 39
4 102481 1024811 FEMALE 29
5 103755 1037552 MALE 36
6 103755 1037551 FEMALE 31
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做。
让我们说这FEMALE是第一位的。我正在寻找的输出很简单:
householdid.x idno isex iage
1 101366 1013661 FEMALE 29
2 101366 1013662 MALE 36
4 102481 1024811 FEMALE 29
3 102481 1024812 MALE 39
6 103755 1037551 FEMALE 31
5 103755 1037552 MALE …Run Code Online (Sandbox Code Playgroud) I have a data frame with lot of company information separated by an id variable. I want to sort one of the variables and repeat it for every id. Let's take this example,
df <- structure(list(id = c(110, 110, 110, 90, 90, 90, 90, 252, 252
), var1 = c(26, 21, 54, 10, 18, 9, 16, 54, 39), var2 = c(234,
12, 43, 32, 21, 19, 16, 34, 44)), .Names = c("id", "var1", "var2"
), row.names = c(NA, -9L), class …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何按R中的列对数据帧进行排序
我试图按几列对data.frame进行排序
df<-data.frame("Sp1"=c(7,4,2),"Sp2"=c(6,2,1))
row.names(df)<-c("A01","A02","A03")
Sp1 Sp2
A01 7 6
A02 4 2
A03 2 1
#I am using
df[with(df, order("Sp1"))]
Run Code Online (Sandbox Code Playgroud)
但这没有任何作用.有什么想法吗?谢谢
我在 R 中有以下数据框:
id<-c(1,2,3,4,10,2,4,5,6,8,2,1,5,7,7)
date<-c(19970807,19970902,19971010,19970715,19991212,19961212,19980909,19990910,19980707,19991111,19970203,19990302,19970605,19990808,19990706)
spent<-c(1997,19,199,134,654,37,876,890,873,234,643,567,23,25,576)
df<-data.frame(id,date,spent)
Run Code Online (Sandbox Code Playgroud)
我需要以提取所有客户观察结果的方式随机抽取 3 个客户(基于 id)。
对于具有任意列数的任意矩阵或数据框x,我想这样做:
x=x[order(x[,1], x[,2], ..., x[,ncol(x)]),]
Run Code Online (Sandbox Code Playgroud)
也就是说,我想按第一列排序,然后按第二列排序,...,然后按最后一列排序。这里关于排序的扩展讨论似乎不包含解决方案。这是我的解决方案,它违反了fortune(106):
sortarray = function(x){
k = ncol(x)
com = paste("x = x[order(x[,", paste(1:k, collapse = "],x[,"), "]),]", sep = "")
eval(parse(text = com))
return(x)}
x = sortarray(x)
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但是没有更干净的方法吗?
编辑重复数据删除澄清: 这个问题与建议的重复问题有很大不同(至少对我来说)。上一个问题涉及您明确指定要排序的列的情况。就我而言,我希望自动选择列(特别是所有列),而不是必须在排序命令中键入每个列名称。下面的答案解决了我的问题,与上一个问题的任何答案不同。
基于这个问题,我点了date.frame dd有两个因素b和x
dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), levels = c("Low", "Med", "Hi"), ordered = TRUE),
x = factor(c("A", "D", "A", "C")),
y = c(8, 3, 9, 9),
z = c(1, 1, 1, 2))
dd <- dd[with(dd, order(b, x)), ]
b x y z
Low C 9 2
Med D 3 1
Hi A 8 1
Hi A 9 1
Run Code Online (Sandbox Code Playgroud)
级别的顺序dd$x不反映dd $ x的实际顺序,但是按字母顺序排列.
levels(dd$x)
[1] "A" "C" "D"
Run Code Online (Sandbox Code Playgroud)
我想要与data.frame中相同的级别顺序,即"C","D","A"
我当然可以 …
所以,我有一个大型数据框(7000行),其排列方式如下:
head(mx)
Stem Progenitor Astrocyte Neuron genename
ENSRNOG00000000007 0.0517698 0.700234 0.11753300 4.591050 Gad1
ENSRNOG00000000010 0.0536043 0.471518 0.00741803 2.280760 Cbln1
ENSRNOG00000000012 0.0163017 0.285178 1.89533000 0.268405 Tcf15
ENSRNOG00000000024 2.7904200 0.703727 13.96940000 4.944650 HEBP1
ENSRNOG00000000028 2.5059900 2.563040 4.83952000 0.840013 Nde1
ENSRNOG00000000029 1.6204500 2.928300 15.58360000 1.750350 Myh11
Run Code Online (Sandbox Code Playgroud)
我需要对此数据帧进行排序,使其按前四列中的任何值从高到低排序.因此,对于该示例,这5行的排序将是:
Stem Progenitor Astrocyte Neuron genename
ENSRNOG00000000029 1.6204500 2.928300 15.58360000 1.750350 Myh11
ENSRNOG00000000024 2.7904200 0.703727 13.96940000 4.944650 HEBP1
ENSRNOG00000000028 2.5059900 2.563040 4.83952000 0.840013 Nde1
ENSRNOG00000000007 0.0517698 0.700234 0.11753300 4.591050 Gad1
ENSRNOG00000000010 0.0536043 0.471518 0.00741803 2.280760 …Run Code Online (Sandbox Code Playgroud) r ×10
sorting ×5
dataframe ×2
alphabetical ×1
char ×1
data.table ×1
factors ×1
grouping ×1
matrix ×1
subset ×1