Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
order()函数似乎不起作用--可能是由于变量类型_R - Fatal编程技术网

order()函数似乎不起作用--可能是由于变量类型

order()函数似乎不起作用--可能是由于变量类型,r,R,我遇到了这个问题,order()似乎工作不正常。在这一点上,我认为这是由于数据类型的问题。即使在SQL中使用ORDERBY,也会出现类似的结果。请告知: # read data from file data <- read.csv("data/the_data.csv", colClasses = "character") # create a new data frame with rate converted to numeric temp <-

我遇到了这个问题,order()似乎工作不正常。在这一点上,我认为这是由于数据类型的问题。即使在SQL中使用ORDERBY,也会出现类似的结果。请告知:

# read data from file
data <- read.csv("data/the_data.csv",
                colClasses = "character")

# create a new data frame with rate converted to numeric
temp <- cbind(data$State, data$Hospital.Name,
    as.numeric(
      data$
      Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure
      ))

# add column names to the new data frame
colnames(temp) <- c("state","hospital","rate")

# remove any cases that include NA values
d <- data.frame(temp[complete.cases(temp),])

# reduce to cases that are restricted to Alabama
d <- d[d$state == "AL",]

# order the dataframe by rate, break any ties using
# the alphabetical order of the hospital name
d <- d[order(d$rate,d$hospital),]
我在“data.table”、“dplyr”和“sqldf”中尝试了相同的排序请求。它们都产生了类似的结果。排序从大约10开始,上升到大约16,然后确定8.8小于16.6,然后重新开始

你能告诉我为什么会这样吗

编辑:提供有关数据的更多信息

dput(droplevels(head(d,20))
结果如下:

structure(list(state = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "AL", class = "factor"), 
hospital = structure(c(1L, 10L, 19L, 4L, 7L, 14L, 3L, 12L, 
15L, 20L, 5L, 8L, 11L, 13L, 6L, 18L, 17L, 9L, 2L, 16L), .Label = c("ANDALUSIA REGIONAL    HOSPITAL", 
"ATMORE COMMUNITY HOSPITAL", "BIRMINGHAM VA MEDICAL CENTER", 
"FLORALA MEMORIAL HOSPITAL", "GADSDEN REGIONAL MEDICAL CENTER", 
"GEORGIANA HOSPITAL", "GROVE HILL MEMORIAL HOSPITAL", "HALE COUNTY HOSPITAL", 
"JACK HUGHSTON MEMORIAL HOSPITAL", "JACKSON HOSPITAL & CLINIC INC", 
"MOBILE INFIRMARY", "PARKWAY MEDICAL CENTER", "RIVERVIEW REGIONAL MEDICAL CENTER", 
"SPRINGHILL MEDICAL CENTER", "ST VINCENT'S BIRMINGHAM", "ST VINCENT'S EAST", 
"ST VINCENT'S ST CLAIR", "WALKER BAPTIST MEDICAL CENTER", 
"WEDOWEE HOSPITAL", "WIREGRASS MEDICAL CENTER"), class = "factor"), 
rate = structure(c(1L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 5L, 5L, 
6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 8L), .Label = c("10.1", 
"10.2", "10.4", "10.5", "10.6", "10.7", "10.8", "10.9"), class = "factor")), .Names =     c("state", 
"hospital", "rate"), row.names = c(21L, 14L, 17L, 42L, 53L, 77L, 
81L, 34L, 36L, 40L, 24L, 55L, 66L, 28L, 29L, 51L, 74L, 87L, 88L, 
7L), class = "data.frame")
当我使用data.table读取数据时,“rate”仍然是一个因子,而不是数字:

data <- read.table("data/outcome-of-care-measures.csv")
str(d)
参考。我试过这个:

data <- read.csv("data/outcome-of-care-measures.csv", colClasses = "character")
f <- data$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure
summary(f)

Length     Class      Mode 
 4706 character character

f <- as.numeric(levels(f))[f]
summary(f)

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
 NA      NA      NA     NaN      NA      NA    4706 

数据您可以将
d$汇率
转换为
数值

d$rate <- as.numeric(as.character(d$rate)
d1 <- d[order(d$rate, d$hospital),]
即使没有指定
colClasses
,也可以正确读取。如果不需要
factor
列,可以在
read.表中使用
stringsAsFactors=FALSE

 d <- read.table('the_data.csv')
 str(d)
 #'data.frame': 13 obs. of  3 variables:
 #$ state   : Factor w/ 1 level "AL": 1 1 1 1 1 1 1 1 1 1 ...
 #$ hospital: Factor w/ 13 levels "ANDALUSIA REGIONAL HOSPITAL",..: 1 8 3 6 10 13 11 12 4 7 ...
 #$ rate    : num  10.1 10.2 10.4 10.4 12.9 12.9 13 13 16.6 8.8 ...

 d[order(d$rate, d$hospital),]$rate
 #[1]  8.8  9.1  9.6  9.9 10.1 10.2 10.4 10.4 12.9 12.9 13.0 13.0 16.6

你能检查一下str(d)
吗。当我执行
v1~d.rate时,我在您展示的示例上尝试了它,但似乎得到了预期的结果。
d1可能是
rate
列中有一个字符元素,它将其转换为
因子
。我刚刚尝试了您的方法。结果是:
typeof(d$费率);str(d$汇率)
“整数”,系数w/105级。顺序没有改变,让我把它添加到帖子中吧。你帮了我很大的忙。当我尝试colClasses方法时,也没有成功。我还尝试了levels()而不是as.character(),但也没有成功。我认为这可能是一个限制R@Tyler正如我在前面的评论中提到的,您可以在不使用
colClasses
的情况下阅读它,然后通过
As.numeric(As.character(..)
将其转换为。不清楚你说的“不工作”是什么意思。执行此操作时,
as.numeric
会将
非数值
元素强制为
NA
。如果要删除这些行,可以对该特定列使用
is.na
,并使用该索引删除这些行。@Tyler没问题。很高兴这有帮助
d$rate <- as.numeric(as.character(d$rate)
d1 <- d[order(d$rate, d$hospital),]
 d <- read.table('the_data.csv', colClasses='character')
 str(d)
 #'data.frame': 13 obs. of  3 variables:
 #$ state   : chr  "AL" "AL" "AL" "AL" ...
 #$ hospital: chr  "ANDALUSIA REGIONAL HOSPITAL" "JACKSON HOSPITAL & CLINIC INC" "BIRMINGHAM VA MEDICAL CENTER" "FLORALA MEMORIAL HOSPITAL" ...
# $ rate    : chr  "10.1" "10.2" "10.4" "10.4" ...
 d <- read.table('the_data.csv')
 str(d)
 #'data.frame': 13 obs. of  3 variables:
 #$ state   : Factor w/ 1 level "AL": 1 1 1 1 1 1 1 1 1 1 ...
 #$ hospital: Factor w/ 13 levels "ANDALUSIA REGIONAL HOSPITAL",..: 1 8 3 6 10 13 11 12 4 7 ...
 #$ rate    : num  10.1 10.2 10.4 10.4 12.9 12.9 13 13 16.6 8.8 ...

 d[order(d$rate, d$hospital),]$rate
 #[1]  8.8  9.1  9.6  9.9 10.1 10.2 10.4 10.4 12.9 12.9 13.0 13.0 16.6
 d$rate <- as.numeric(as.character(d$rate))
 str(d)
 #'data.frame': 20 obs. of  3 variables:
 #$ state   : Factor w/ 1 level "AL": 1 1 1 1 1 1 1 1 1 1 ...
 #$ hospital: Factor w/ 20 levels "ANDALUSIA REGIONAL    HOSPITAL",..: 1 10 19 4 7 14 3 12 15 20 ...
 #$ rate    : num  10.1 10.2 10.4 10.4 10.4 10.4 10.4 10.5 10.6 10.6 ...

 d[order(d$rate, d$hospital),]$rate
 #[1] 10.1 10.2 10.4 10.4 10.4 10.4 10.4 10.5 10.6 10.6 10.7 10.7 10.7 10.8 10.8
 #[16] 10.8 10.8 10.8 10.8 10.9