0

我在尝试从似乎只有一列的数据集中删除行时遇到问题 - 因此它就像一个列向量。我正在尝试做两件事,首先(对我而言)并不重要。以下是数据示例:

共和党人,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,y
民主党人,y,y,y,n,n,n,y,y ,y,n,n,n,n,n,?,?

我正在引入这样的数据:

sampledata <- read.table("house-votes-84.data",)

但我想将每行的数据字符串转换为一列并为该列命名。现在我知道我可以通过以下方式命名事物:

names(sampledata) <- c("col1" ...., "col17")

但只有在有 17 列时才能这样做。每个将是列由逗号分隔。

其次,我正在尝试摆脱带有问号的行?

我试过什么?

我已经尝试过诸如(我的数据称为示例数据):

sampledata[apply(sampledata[, -1], MARGIN = 1, function(x) all(x != "?")), ]  

那是行不通的(我猜是因为只有一列,所以 Margin 必须是每一列都会被查看的东西(我尝试了 -1 作为 Margin 但无济于事)

我尝试将 ? 更改为 NA 并使用

na.omit(sampledata)

那也行不通。

我试过用逗号解析,比如

splitting <- strsplit(as.character(sampledata$V1), split=",")

其中 V1 是单列名称。这是我得到的最有趣的结果

以下435条(有435行数据)

_[[435]]_  
_ [1] "republican" "n"          "y"          "n"          "y"        _  
_ [6] "y"          "y"          "n"          "n"          "n"       _
_[11] "y"          "n"          "y"          "y"          "y"  _
_[16] "NA"         "n"_

但是当我尝试更改名称时:错误

names(sampledata) <- c("col1", "col2", "col3", "col4", "col5",  : 'names' attribute [17] must be the same length as the vector [1]

我已经尝试过其他事情,例如尝试将其转换为数据集 - 然而,这似乎将所有值转换为看起来是随机的数字(不是诸如 0、1 或 99 之类的?,而是值甚至多达 100 个,甚至更多)

我只是想以正确的格式获取数据,以便我可以对没有问号的样本进行回归。

我最幸运的网站是 Stack Exchange Also 并且在这里:

所有/任何列大于特定值的子集行

和这里:

将逗号分隔的条目转换为列

使用第一个,我可以让它工作,但即使这样,我也在代码本身的 3 列中生成数据 - 我似乎无法让相同的代码在我的 ? 上工作(尽管我可以得到使用以下方法删除带有问号的行的程序:

 X <- data.frame(Variable1=c(11,"?",12,15),Variable2=c(2,3,1,4))  
X[X$Variable1!="?", ]  

我一直在尝试找出一种方法来制作代码,逐行对导入的数据执行相同的操作,因为我也将其作为 data.frame 拉入(我意识到我只有 1 列,该列是称为 V1,所以我同样将代码更改为

X$V1  

sampledata <- read.table("house-votes-84NaN.data.txt")
splitdat = do.call("rbind", strsplit(sampledata$V1, ","))

但我明白了

**Error in strsplit(sampledata$V1, ",") : non-character argument**

我确实意识到我在 read.table 中需要更多参数(我认为),因为它们还有更多参数 - 但我不明白需要输入什么。

任何帮助将不胜感激。

谢谢,

布赖恩

4

2 回答 2

1

read.csv首先,使用函数和参数读取您的数据,header = FALSE并且 row.names = 1

sampledata <- read.csv(text="republican,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,y
democrat,y,y,y,n,n,n,y,y,y,n,n,n,n,n,?,?", header = FALSE, row.names = 1)

然后您可以使用以下命令转置数据框t

t(sampledata)

结果:

    republican democrat
V2  "n"        "y"     
V3  "y"        "y"     
V4  "n"        "y"     
V5  "y"        "n"     
V6  "y"        "n"     
V7  "y"        "n"     
V8  "n"        "y"     
V9  "n"        "y"     
V10 "n"        "y"     
V11 "n"        "n"     
V12 "n"        "n"     
V13 "y"        "n"     
V14 "y"        "n"     
V15 "y"        "n"     
V16 "n"        "?"     
V17 "y"        "?"

您可以使用删除带有问号的列

dat <- as.data.frame(t(sampledata))

dat[!apply(dat == "?", 2, any)]

    republican
V2           n
V3           y
V4           n
V5           y
V6           y
V7           y
V8           n
V9           n
V10          n
V11          n
V12          n
V13          y
V14          y
V15          y
V16          n
V17          y
于 2012-12-21T19:02:34.817 回答
1

(认为​​您可能确实需要更清楚地了解转置和 hte 删除操作的顺序。这首先进行删除,但如果您先转置,则会给您不同的结果。

 dat <- read.table(text="republican,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,y
 democrat,y,y,y,n,n,n,y,y,y,n,n,n,n,n,?,?", sep=",")
 dat
#--------------------
          V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 republican  n  y  n  y  y  y  n  n   n   n   n   y   y   y   n   y
2   democrat  y  y  y  n  n  n  y  y   y   n   n   n   n   n   ?   ?
#--------------
 dat[ ! apply(dat, 1, function (x) any(x=="?") ), ]
#----------------
          V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 republican  n  y  n  y  y  y  n  n   n   n   n   y   y   y   n   y

我不确定您为什么要转置它,但您可以使用t函数 (transpose) 来实现。

> t( dat[ ! apply(dat, 1, function (x) any(x=="?") ), ] )
    1           
V1  "republican"
V2  "n"         
V3  "y"         
V4  "n"         
V5  "y"         
V6  "y"         
V7  "y"         
V8  "n"         
V9  "n"         
V10 "n"         
V11 "n"         
V12 "n"         
V13 "y"         
V14 "y"         
V15 "y"         
V16 "n"         
V17 "y"         

使用派对排顺序的数据,您可以用任何“?”来消除问题。通过将 apply 与列提取一起使用来响应列(将 apply fn 放在列位置并使用 2 作为 MARGIN 参数):

> dat[ , ! apply(dat, 2, function (x) any(x=="?") ) ]
          V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15
1 republican  n  y  n  y  y  y  n  n   n   n   n   y   y   y
2   democrat  y  y  y  n  n  n  y  y   y   n   n   n   n   n
于 2012-12-21T19:02:35.847 回答