gpt4 book ai didi

r - 为什么我的数据框中的行数会增加?

转载 作者:行者123 更新时间:2023-12-04 11:12:29 25 4
gpt4 key购买 nike

我从一个有 10 行的数据框开始,并根据某些条件填充一列。当我到达循环的末尾时,我看到我的数据框中有更多的行。

请参阅下面的代码进行复制。

col1 = c(1,1,1,1,1,1,1,1,1,1)
col2 = c(2,2,2,2,2,2,2,2,2,2)
df = data.frame(col1,col2)
bucket = c(2,4,6,8,10)

cat(paste("Number of rows at start == ",nrow(df)))

df$newcol = NULL
for(i in 1:5)
{
if(i == 1)
{
df[1:bucket[1],"newcol"] = "val1"
cat(paste("from 1 to",bucket[1],"\n"))
}else
{
df[bucket[i-1]+1:bucket[i],"newcol"] = paste0("val",i)
cat(paste("from ",bucket[i-1]+1,"to",bucket[i],"\n"))
}

cat(paste(nrow(df),"\n\n"))
}

cat(paste("Number of rows at end == ",nrow(df)))

最后,我的数据框如下所示
   col1 col2 newcol
1 1 2 val1
2 1 2 val1
3 1 2 val2
4 1 2 val2
5 1 2 val3
6 1 2 val3
7 1 2 val4
8 1 2 val4
9 1 2 val5
10 1 2 val5
11 NA NA val5
12 NA NA val5
13 NA NA val5
14 NA NA val5
15 NA NA val5
16 NA NA val5
17 NA NA val5
18 NA NA val5

最佳答案

你可以改变

df[bucket[i-1]+1:bucket[i],"newcol"] = paste0("val",i)


df[(bucket[i-1]+1):bucket[i],"newcol"] = paste0("val",i)

在循环中并运行它以获得
 df
# col1 col2 newcol
#1 1 2 val1
#2 1 2 val1
#3 1 2 val2
#4 1 2 val2
#5 1 2 val3
#6 1 2 val3
#7 1 2 val4
#8 1 2 val4
#9 1 2 val5
#10 1 2 val5

举个例子
bucket[2-1]+1 : bucket[2]
#[1] 3 4 5 6

由于运算符优先,它正在做
bucket[2-1]+(1:bucket[2])
#[1] 3 4 5 6

为了纠正它,我们可以用大括号将部分分开
(bucket[2-1]+1):bucket[2]
#[1] 3 4

关于r - 为什么我的数据框中的行数会增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29726593/

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