我试图根据名为'信用卡使用情况的列在R中订购数据框。数据框的名称是mydata。以下没有逗号的命令会出现错误
newdata = mydata [订单('信用卡使用情况')]
但以下带逗号的命令可以正常工作
newdata = mydata [订单('信用卡使用情况'),]
我需要理解为什么我们需要逗号。请问有人能用简单的语言解释幕后发生的事情吗?
还有以下命令
mydata [订单('信用卡使用'),]
只给出第一行而不是整个数据帧。为什么呢?
答案 0 :(得分:1)
为什么mydata[order('credit card usage'),]
仅返回first row
是一个棘手的问题。
在,
[
之后使用的列名称是指列的值,否则它只是string
。
order('credit card usage')
调用只会将string
传递给它并将其排序并传递索引(即1
)。因此:
mydata[order('credit card usage'),]
缩减为
mydata[1,]
=>这是1st row
的{{1}}。
答案 1 :(得分:0)
MKR的答案解释了为什么OP获得了帖子中描述的结果。在这里,我们将解释如何处理名为credit card usage
的列以正确排序整个数据框。
一般来说,不建议在R中使用包含空格的列名,因为它经常会导致OP遇到的意外结果。
要在名称中包含空格的数据框中使用列,必须使用提取运算符的[[
形式。我们将用一些示例数据来说明......
set.seed(95014123)
mydata <- data.frame(matrix(round(runif(100)*1000,0),nrow=50))
names(mydata) <- c("credit card usage","value")
head(mydata)
head(mydata[order(mydata[["credit card usage"]]),])
...和输出:
> set.seed(95014123)
> mydata <- data.frame(matrix(round(runif(100)*1000,0),nrow=50))
> names(mydata) <- c("credit card usage","value")
> head(mydata)
credit card usage value
1 795 217
2 816 613
3 342 323
4 126 751
5 618 780
6 625 529
> head(mydata[order(mydata[["credit card usage"]]),])
credit card usage value
47 25 109
44 81 534
18 91 985
31 99 931
19 109 190
4 126 751
>
可以通过gsub()
函数替换带下划线的空格,这将使后者在后续函数中使用提取运算符的$
形式。
# replace spaces with underscores
names(mydata) <- gsub(" ","_",names(mydata))
head(mydata[order(mydata$credit_card_usage),])
...和输出:
> # replace spaces with underscores
> names(mydata) <- gsub(" ","_",names(mydata))
> head(mydata[order(mydata$credit_card_usage),])
credit_card_usage value
47 25 109
44 81 534
18 91 985
31 99 931
19 109 190
4 126 751
>