gpt4 book ai didi

r - 我的数据如何存储在 R 中?

转载 作者:行者123 更新时间:2023-12-04 10:45:27 27 4
gpt4 key购买 nike

所以,我试图找出一个更大的问题,我认为这可能源于我从 .txt 导入数据时发生的事情。文件。我的常规开始命令是:

data<-read.table("mydata.txt",header=T)
attach(data)

因此,如果我的数据显示,3 列带有标题 "Var1" , "Var2""Var3" ,究竟是如何进口的?似乎它是作为 3 个单独的向量导入的,然后绑定(bind)在一起,类似于使用 cbind() .

我更大的问题是修改数据。如果我的数据框中的一行有一个空点(在任何列中),我需要将其删除:
data <- data[complete.cases(data),]

完美 - 现在假设原始数据框有 100 行,其中 5 行有一个空槽。我的新数据框应该有 95 行,对吧?好吧,如果我尝试:
> length(Var1)
[1] 100
> length(data$Var1)
[1] 95

所以看起来像标记为 Var1 的原始列不受我重写整个数据框的行的影响。这就是为什么我相信当我导入数据时,我实际上只有 3 个单独的列存储在某个名为 Var1 的位置。 , Var2Var3 .至于让 R 认识到我想要修改版的专栏,我认为我需要按照以下方式做一些事情:
Var1 <- data$Var1 #Repeat for every variable

我的问题是我需要为每个变量编写上面的代码。我拥有的数据框很大,这种编码方式看起来很乏味。有没有更好的方法来转换我的数据,然后能够调用修改后的变量,而无需每次都使用 data$ 前体?

最佳答案

read.table()将数据读入数据框中,文本文件中的每一列(变量)都有一个组件(列)。 R 的数据框就像 Excel 电子表格,工作表中的每一列都可以包含不同类型的数据(与矩阵相反,矩阵在 R 中只能包含单一类型的数据)。

实际上,结果就好像数据是逐列读取的,然后使用 cbind.data.frame() 逐列绑定(bind)在一起。方法。这不是它在实践中的做法。你有一个对象 data包含三个组件,它们都不能通过键入它们的名称来访问(例如 Var1 )。试试这个

data <- read.table("mydata.txt", header = TRUE)
Var1

在一个干净的 session 中(最好如果你开始一个新的 session 来尝试这个,以防万一)。

如果您输入 ls()你只会看到 data列出(假设一个干净的 session )。这清楚地证明了您认为您拥有三列和单个对象的想法。

这里真正的问题是 attach()不是 read.table() .
attach() 很少有好的用途而你展示的那个不在其中。 attach(data)放置一个 复制 data在搜索路径上。重点是 复制 .搜索路径上的内容与 data 不同在全局环境(您的工作区)中。对 data 的任何更改在全局环境中不会反射(reflect)在搜索路径上的副本中,因为这是两个完全独立的对象。

R 有一个搜索路径,用于查找命名对象。通常 R 不会查看对象内部,因此 Var1每当您在提示符下键入它们的名称或尝试直接使用该对象时,都不会找到 etc。当你 attach()一个对象,您可以将其视为打开对象以供 R 搜索。但是让人们注意到的是,人们现在正在查看对象的副本而不是对象本身。

在交互式 session 中,有一些有用的帮助函数意味着您无需键入 data$每时每刻。见 ?with , ?within , ?transform例如。

真的不要用 attach()代替一些打字。

关于r - 我的数据如何存储在 R 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17780400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com