【问题标题】:Input variable list without manually adding a comma between them输入变量列表,无需在它们之间手动添加逗号
【发布时间】:2012-05-24 04:11:36
【问题描述】:

基本上我想实现这一点:

vars <- c(x1, x20, x37, etc)
summary(data[vars])

但是,我的变量列表很长,它们之间没有逗号

编辑:Data 有 500 个变量,vars 是我要选择的列表。变量名称不遵循任何模式。该列表采用x1 x20 x37 etc 的形式,即用空格分隔。此列表来自 SAS 语法文件,不是 R 工作区的一部分。

我研究了用cat() 等分隔符连接变量的函数。然而,这从一开始就需要一个对象。另一种方法是在编辑器中使用查找/替换(空格到逗号),但我认为这是一种肮脏的技巧。

显然,我在定义变量列表时遗漏了一些东西;必须有一个简单的解决方案。

【问题讨论】:

  • 那么x1x2x3 的值是多少,它们的 是否真的匹配data 对象的任何列名?
  • 我猜你想使用scan 从文件中读取数字。
  • 我认为你最好告诉我们更多关于你有什么和你想要什么(DWin 要求什么),因为可能有更好的方法。
  • 您的变量列表最初是什么样的?在这种情况下是字符变量“x1 x20 x37”吗?还是在某个文本文件中?
  • 请花时间解决上述问题并澄清您的问题,以便对网站上的未来搜索更有用。

标签: r list variables


【解决方案1】:

使用这个:

data <- data.frame(x1 = rnorm(10), x2 = rnorm(10))
vars <- "x1 x2"
data[unlist(strsplit(vars, ' '))]

【讨论】:

  • 因为strsplit(vars, ' ') 的结果类型是list,不能放到data[这里]。但这就是您在这里主要需要的 strsplit 。
  • +1 做同样事情的另一种方法是data[scan(textConnection(vars), what="")]
【解决方案2】:

假设您可以将文件保存到文本文件中(很难说不知道数据来自哪里):将变量保存为纯文本文件。使用扫描将它们读取到数据文件中:

df <- read.table("foo.txt", sep=" ")

然后您可以使用names(df) 命名数据框中的列;或者,如果您可以获得包含您可以使用的列名称的文本文件

df <- read.table("foo.txt", header=TRUE, sep=" ") 

【讨论】:

  • 可能也可以,但最好留在环境中。
  • 你这是什么意思?您将如何离开 R 环境?
  • 很难知道我们是否需要离开环境,因为我们不知道数据是以什么形式出现的。@Rico,如果您可以将问题编辑为更清楚地说明您获取数据的格式。
  • 我的意思是创建一个文本文件;可能是对“环境”的不当使用。
【解决方案3】:

看起来它们已经是您工作区中变量的名称?

x <- ls()[grep('^x\\d', ls())]

如果您没有其他任何以 x 和您想要包含的数字开头的内容,这可能会让您到达那里。

如果它们是您要粘贴的文本字符串或其他内容,那么可能

x <- scan()

(总的来说,你的问题很模糊)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2021-11-09
    • 2018-04-18
    相关资源
    最近更新 更多