v
id a b c d
1 1 1 Adam Smith 10
2 2 2 John Bond 15
3 3 3 Sam Ted 20
我在提示符下发出了以下命令。
> v1<-rbind(v,rep(c(4,5,"Deb","Jones",25),5))
我正在尝试从dataframe v创建一个数据帧v1,其中v1应如下所示:
> v1
id a b c d
1 1 1 Adam Smith 10
2 2 2 John Bond 15
3 3 3 Sam Ted 20
4 4 5 Deb Jones 25
5 4 5 Deb Jones 25
6 4 5 Deb Jones 25
7 4 5 Deb Jones 25
8 4 5 Deb Jones 25
但实际上我得到的是:
> v1
id a b c d
1 1 1 Adam Smith 10
2 2 2 John Bond 15
3 3 3 Sam Ted 20
4 4 5 Deb Jones 25
为什么行"4 5 Deb Jones 25"
只出现v1
一次,而不是5次?
新手在这里。所以请用简单的英语解释。所有帮助表示赞赏。
由于
答案 0 :(得分:3)
options_parser.parse!(args)
raise "orphans found - have you forgotten commas?" if args.count > 1
不会那样工作 - 它只是将输出连接成一个向量,它看起来像rep
的一行。然后,rbind
修剪其输入以匹配最短的行。
相反,您可以在此处使用具有适当长度(5)的向量的rbind
,并且每次都返回该行。 lapply
这会为您提供行列表。您可以使用list_of_rows <- lapply(1:5, function(pass) list(4,5,"Deb","Jones",25))
将其转换为包含5个相同行的矩阵。
您可以将该矩阵包装在do.call(rbind, list_of_rows)
:
data.frame
df_tmp <- data.frame(do.call(rbind, lapply(1:5, function(pass) list(4,5,"Deb","Jones",25))))
虽然 X1 X2 X3 X4 X5
1 4 5 Deb Jones 25
2 4 5 Deb Jones 25
3 4 5 Deb Jones 25
4 4 5 Deb Jones 25
5 4 5 Deb Jones 25
看起来没问题,但每列实际上都是一个列表,这很烦人。您可以使用df_tmp
unlist
感谢@thelatemail使用df <-lapply(df_tmp, unlist)
str(df)
List of 5
$ X1: num [1:5] 4 4 4 4 4
$ X2: num [1:5] 5 5 5 5 5
$ X3: chr [1:5] "Deb" "Deb" "Deb" "Deb" ...
$ X4: chr [1:5] "Jones" "Jones" "Jones" "Jones" ...
$ X5: num [1:5] 25 25 25 25 25
代替c
来指出早期解决方案的问题
答案 1 :(得分:2)
您也可以传递一个0 -1 -1 -1
1 1 1 -1
3 3 -1 -1
6 6 6 6
对象来填充list
中所需的行。
v
v[4:8,] <- list(4,5,"Deb","Jones",25)
# or without knowing the number of rows:
v[(nrow(v)+1):(nrow(v)+5),] <- list(4,5,"Deb","Jones",25)
# id a b c d
#1 1 1 Adam Smith 10
#2 2 2 John Bond 15
#3 3 3 Sam Ted 20
#4 4 5 Deb Jones 25
#5 4 5 Deb Jones 25
#6 4 5 Deb Jones 25
#7 4 5 Deb Jones 25
#8 4 5 Deb Jones 25
的位置:
v