复制列中的数据并粘贴一行语法

时间:2014-11-07 04:24:43

标签: r text

我参加了课程的视频讲座。我得到了一份这样的工资数据表。

data02 = read.table("~/R/introstats/NYRedBullsSalaries.txt", header = F)

表格如下:

           V1
1    33750.00
2    44000.00
3   138188.00
4    45566.67
5    44000.00

我想将V1中的所有数据复制到一行,保留格式为数字。我键入了这样的语法:

salaries = paste(as.character(data02), sep = " ", collapse =",")
salaries

它有效。

# [1] "c(33750, 44000, 138188, 45566.67, 44000)"

但是当我想制作一个盒子图时,它失败了:

boxplot(salaries)
## Error in x[floor(d)] + x[ceiling(d)]

二元运算符的非数字参数

我只能通过手动复制一堆数字来实现:

salaries_revised = c(33750, 44000, 138188, 45566.67, 44000)
boxplot(salaries_revised)

问题:

如果我处理5个数据就可以了。但是,突出和复制5,000个数据是不可能的。你能告诉我如何在没有人工输入的情况下复制大量数据吗?

1 个答案:

答案 0 :(得分:2)

只需使用

即可获得boxplot
 boxplot(data02) #it will give a boxplot for each column

从帖子中,我假设你想模仿使用

生成的输出
salaries_revised = c(33750, 44000, 138188, 45566.67, 44000)
str(salaries_revised)
#num [1:5] 33750 44000 138188 45567 44000

您无需手动复制元素即可获得boxplot输入数据集的正确格式。只是做:

salaries_revised <- data02[,"V1"]

或者

salaries_revised <- data02$V1

str(salaries_revised)
# num [1:5] 33750 44000 138188 45567 44000

关于您使用的paste代码,它创建了一个字符string

salaries <- paste(as.character(data02), sep = " ", collapse =",")
str(salaries)
# chr "c(33750, 44000, 138188, 45566.67, 44000)"

获得所需结果的一种方法是使用eval(parse(..

boxplot(eval(parse(text=salaries)))

您甚至不需要paste来获取上述字符串

 as.character(data02)
 #[1] "c(33750, 44000, 138188, 45566.67, 44000)"

 boxplot(eval(parse(text=as.character(data02))))

此外,您使用data.frame作为paste。假设,您的数据集有多列。

data03 <- data02
data03$V2 <- 1:5
as.character(data03)
#[1] "c(33750, 44000, 138188, 45566.67, 44000)"
#[2] "1:5"  

直接在上面的eval(parse(..)将只返回最后一个元素

 eval(parse(text=as.character(data03)))
 #[1] 1 2 3 4 5

使用paste

salaries <- paste(as.character(data03), sep = " ", collapse =",")
salaries 
#[1] "c(33750, 44000, 138188, 45566.67, 44000),1:5"

最终会出错。

boxplot(eval(parse(text=salaries)))
#Error in parse(text = salaries) : <text>:1:41: unexpected ','

如果您只需要V1

 salaries <- paste(as.character(data03[,"V1", drop=FALSE]), 
                                       sep = " ", collapse =",")

默认情况下,当您尝试从数据集中对单个列进行子集时,它会转换为vector。因此,您可以通过指定drop=FALSE来避免这种情况。

或者

 salaries <- paste0("c(",paste(as.character(data03[,"V1"]),
                                        sep=" ", collapse=","), ")") 

 salaries
 #[1] "c(33750,44000,138188,45566.67,44000)"

数据

 data02 <- structure(list(V1 = c(33750, 44000, 138188, 45566.67, 44000)), 
 .Names = "V1", class = "data.frame", row.names = c("1", "2", "3", "4", "5"))