如何在R .CSV数据中描述性地按标题选择数据?

时间:2016-10-30 14:25:57

标签: r csv

我想按标题描述性地选择数据。 这里是一个在.CSV数据中选择男性ID的示例。 您可以使用以下数据执行data[3] == "males",但我希望data[Gender] == "males"以避免任何错误。 文件data.csv

ID,Age,Gender
100,69,male
101,75,female
102,84,female
103,,male
104,66,female

代码中的lastline伪代码

data = read.csv("/home/masi/data.csv",header = TRUE,sep = ",")
str(data)

# PSseudocode
#data.Gender == "male"
#data[Gender] == "male"

现在,我们有一个男性列表,我们想要返回与这些男性相对应的ID

eliData <- data$Gender == "male"
# to return IDs corresponding to males
# Pseudocode
data$ID == eliData

Pseudocode为所有人返回false。

动机:为不同的流行病学群体建立特征相关性matrices,其中每个数据点都有许多自己的特征。

操作系统:Debian 8.5
R:3.1.1

1 个答案:

答案 0 :(得分:1)

您可以在R中使用$表示法。 data$Gender == "male"就是你想要的。 要从id为性别的行中获取"male",您可以执行此操作

males <- data$Gender == "male"
maleIDs <- data[which(males), ]$ID

这里Eli的一般任务功能很棒

getIDs <- function(age, gender) {
        data <- read.csv("/home/masi/data.csv",header = TRUE,sep = ",")

        gender <- data$Gender == gender
        if (length(age) == 1) {
                ages <- data$Age == age
        } else {
                ages <- (data$Age >= age[1] & data$Age <= age[2])
        }
        genderIDs <- data[which(gender), ]$ID
        ageIDs <- data[which(ages), ]$ID
        intersect(ageIDs, genderIDs)
}
# So if you called this as getIDs(c(20, 30), "male")
# You'd get the ids of all males with age >= 20 and <= 30