R:.N在data.table中返回0列

时间:2016-11-30 21:20:51

标签: r

我搜索过,无法找到类似的问题。我试图计算一个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)时,它会返回,就好像列已正确加载一样。

我真的不确定我在哪里出错了,有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:1)

您似乎正在尝试在data.frame上使用data.table操作。对于data.table,你的语法看起来有些偏差。

这是你如何找到VAL == 24

的nrow
nrow(DT[DT$VAL==24,])

如果您想使用data.table执行此操作,您首先必须使用data.table。运行这个:

library(data.table)
setDT(DT)
DT[,.(Count = .N),by = .(VAL)]

答案 1 :(得分:0)

我在R中使用虹膜数据集作为例子。

假设您只想保留Sepal.Length5.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使用:=参数非常容易。

感谢大家的答案。