我搜索过,无法找到类似的问题。我试图计算一个data.frame中的行,其中VAL
变量的值等于24。
我从https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv
下载了数据并使用read.table
将其读取到R:
download.file(fileUrl, destfile = "./Housing_Data/Housingdata.csv", method = "curl")
DT <- read.table("./Housing_Data/Housingdata.csv", sep = ",", header = TRUE)
我试过
DT[, .N, by=VAL]
返回:
[.data.frame
中的错误(DT ,,。N,by = VAL):未使用的参数(by = VAL)
DT[, .N]
返回:
0列和6496行的数据框
但是,当我运行head(DT)
时,它会返回,就好像列已正确加载一样。
我真的不确定我在哪里出错了,有人能指出我正确的方向吗?
答案 0 :(得分:1)
您似乎正在尝试在data.frame上使用data.table操作。对于data.table,你的语法看起来有些偏差。
这是你如何找到VAL == 24
的nrownrow(DT[DT$VAL==24,])
如果您想使用data.table执行此操作,您首先必须使用data.table。运行这个:
library(data.table)
setDT(DT)
DT[,.(Count = .N),by = .(VAL)]
答案 1 :(得分:0)
我在R中使用虹膜数据集作为例子。
假设您只想保留Sepal.Length
为5.1
所以你会有
nrow(iris[iris$Sepal.Length == 5.1, ])
或
dim(iris[iris$Sepal.Length == 5.1, ])[1]
答案 2 :(得分:0)
我不知道完整的网址是什么样的,但这里有一个选项。
df <- read.csv("http://www.football-data.co.uk/mmz4281/1516/E0.csv",
header = TRUE, stringsAsFactors = TRUE)[1:6]
这是另一种方法。
library(dplyr)
MyData2 <- read.csv(file="http://www.grex.org/~ev/breweries_geocode.csv", header=TRUE, sep=",")
答案 3 :(得分:0)
我刚刚意识到我从未通过发布解决方案得出结论。 Kristofersen正确地指出我试图在data.table
上使用data.frame
命令。他建议的简单解决方案是转换它:
library(data.table)
SetDT(DT)
DT[, .N, by=VAL]
其他选项也有效 - 首先使用fread
将数据加载为data.table
。这可能是更可取的,因为它更具可扩展性。
Drj还提供了一个很好的答案,允许我使用data.frame
命令执行相同的操作,但是我忽略了指定我正在使用data.table
因为我需要能够创建新列a在这个项目中很多,data.table
使用:=
参数非常容易。
感谢大家的答案。