R:将“字符”类型附加到数值列表中

时间:2014-01-31 14:35:28

标签: string r list append numeric

我有一个数值列表,比如说

> list <- c(1,10,12,24)
> list
[1]  1 10 12 24

我想在其后附加一串字符,以便输出显示:

> list
[1]  "name" 1 10 12 24

我尝试了以下代码:

list <- c("name",1,10,12,24)

list <- c(1,10,12,24)
list <- c("name",as.numeric(list))

但是,可以预见的是,所有数字都被转换为字符类型:

> list <- c(1,10,12,24)
> list <- c("name",as.numeric(list))
> list
[1] "name" "1"    "10"   "12"   "24"

如何在前面添加字符类型时保留数字类型?

[编辑] 目标是将此行作为一行添加到现有数据框df,其中df [1]包含字符串,df [2:5]包含数字。

3 个答案:

答案 0 :(得分:4)

@Fernando几乎有这个想法:如果你想把它与list结合起来,你的“行”应该是data.frame

以下是几个例子:

## A sample `data.frame`
mydf <- data.frame(A = c("one", "two"), B = 1:2, C = 3:4, 
                   D = 5:6, stringsAsFactors = FALSE)

## Your initial vector...
addMe <- c(1, 10, 12)
## ... now as a list
addMe <- c("name", as.list(addMe))
addMe
# [[1]]
# [1] "name"
# 
# [[2]]
# [1] 1
# 
# [[3]]
# [1] 10
#
# [[4]]
# [1] 12
#

## Put it all together...
new <- rbind(mydf, addMe)
new
#      A B  C  D
# 1  one 1  3  5
# 2  two 2  4  6
# 3 name 1 10 12
str(new)
# 'data.frame':  3 obs. of  4 variables:
#  $ A: chr  "one" "two" "name"
#  $ B: num  1 2 1
#  $ C: num  3 4 10
#  $ D: num  5 6 12

或者,创建一行(或更多,如有必要)data.frame并将其与现有data.frame绑定:

addMe <- c(1, 10, 12)
rbind(mydf, setNames(cbind("name", data.frame(t(addMe))), names(mydf)))
#      A B  C  D
# 1  one 1  3  5
# 2  two 2  4  6
# 3 name 1 10 12 

主要说明:这取决于您的第一列是字符,而不是因子,变量。如果它们是因素,则需要确保变量包含正确的levels(或首先转换为字符,然后重新计算因子)。

答案 1 :(得分:2)

您使用的是vector,而不是list。您不能在向量中混合类型,而是使用list

my.list = list(1,10,12,24)
my.list = append("name", my.list)

请记住,R中“增长”的结构对性能非常不利。

答案 2 :(得分:2)

如何使用字符串的列表元素名称:

l <- list('name'=c(1,10,12,24))
l
## $name
## [1]  1 10 12 24

names(l)
## [1] "name"

按名称提取数字向量:

l[["name"]]
## [1]  1 10 12 24

将其设为数据框:

as.data.frame(l)
##   name
## 1    1
## 2   10
## 3   12
## 4   24