R 根据因子更改变量值
我有一个如下所示的数据集: 头 尾部: 我想根据A改变数据中T的值。 例如,数据的范围为0.1-181,每个A的间隔为0.1,T并不总是从0.1开始,这就是我想要做的。(因此,每当A发生变化时,T总是从0.1开始)。 我尝试先将T=0设为:R 根据因子更改变量值,r,data-management,R,Data Management,我有一个如下所示的数据集: 头 尾部: 我想根据A改变数据中T的值。 例如,数据的范围为0.1-181,每个A的间隔为0.1,T并不总是从0.1开始,这就是我想要做的。(因此,每当A发生变化时,T总是从0.1开始)。 我尝试先将T=0设为: > NM$T=NULL 然后我尝试使用sapply,但失败惨重。 任何帮助都会很好 谢谢如果您希望T成为一个序列,从0.1开始,并为a列定义的每个组增加0.1,您可以使用以下代码: DF$A <- sample(LETTERS[1:3],20,
> NM$T=NULL
然后我尝试使用sapply,但失败惨重。
任何帮助都会很好
谢谢如果您希望
T
成为一个序列,从0.1开始,并为a列定义的每个组增加0.1,您可以使用以下代码:
DF$A <- sample(LETTERS[1:3],20,T) # fake data
#> DF$A
# [1] "B" "C" "C" "C" "B" "B" "A" "C" "A" "C" "B" "C" "B" "B" "A" "C" "C" "A" "A" "C"
DF$T <- ave(as.integer(DF$A), DF$A, FUN=function(x)seq(from=0.1,by=0.1,length.out=length(x)))
如果希望T
是一个序列,从0.1开始,对于a
列定义的每个组增加0.1,可以使用以下代码:
DF$A <- sample(LETTERS[1:3],20,T) # fake data
#> DF$A
# [1] "B" "C" "C" "C" "B" "B" "A" "C" "A" "C" "B" "C" "B" "B" "A" "C" "C" "A" "A" "C"
DF$T <- ave(as.integer(DF$A), DF$A, FUN=function(x)seq(from=0.1,by=0.1,length.out=length(x)))
通常,这在数据中最容易完成。表:
library(data.table)
dt = data.table(your_df)
dt[, T := seq(from = 0.1, by = 0.1, length.out = .N), by = A]
下面是一个例子:
dt = data.table(A = c(1,1,1,2,2), B = 2)
dt[, T := seq(from = 0.1, by = 0.1, length.out = .N), by = A]
dt
# A B T
#1: 1 2 0.1
#2: 1 2 0.2
#3: 1 2 0.3
#4: 2 2 0.1
#5: 2 2 0.2
通常,这在数据中最容易完成。表:
library(data.table)
dt = data.table(your_df)
dt[, T := seq(from = 0.1, by = 0.1, length.out = .N), by = A]
下面是一个例子:
dt = data.table(A = c(1,1,1,2,2), B = 2)
dt[, T := seq(from = 0.1, by = 0.1, length.out = .N), by = A]
dt
# A B T
#1: 1 2 0.1
#2: 1 2 0.2
#3: 1 2 0.3
#4: 2 2 0.1
#5: 2 2 0.2
但在您的示例中,列A在所有行中都是1。。。当A改变时,您希望如何改变T?A可以设置为“NM$A=as.factor(NM$A)”的因子,但在您的示例中,A列在所有行中都是1。。。当A发生变化时,您希望如何改变T?A可以设置为“NM$A=as.factor(NM$A)”的因子。我不确定它是否有效,因为我的数据变成了原子变量。:)对不起,我不明白你想说什么。您可能需要编辑您的问题并添加两件事-一个非平凡的示例,它有不止一个“a”值和该示例所需的输出。好的,我现在将其转换为as.data.frame,检查它是否worked@Kaye11我在上面举了一个简短的例子,看看这是否就是你想要的。自从我的数据变成原子变量后,我不确定它是否有效对不起,我不明白你想说什么。您可能需要编辑您的问题并添加两件事-一个非平凡的示例,它有不止一个“a”值和该示例所需的输出。好的,我现在将其转换为as.data.frame,检查它是否worked@Kaye11我在上面举了一个简短的例子,查看这是否是您正在查找的内容。它生成了一个错误:有50个或更多警告(使用warnings()查看前50个)>warnings()警告消息:1:In[@Kaye11,这是因为您的数据帧中已经有一个T
列。请尝试使用类似T\u new
,或先删除T
。使用此选项:DF$TR@Kaye11,明白了!您必须使用此选项:DF$TR它产生了一个错误:有50个或更多警告(使用warnings()查看前50个)>警告()警告消息:1:在[@Kaye11中,这是因为您的数据帧中已经有一个T
列。请尝试使用类似于T\u new
的内容,或先删除T
。使用此选项:DF$TR@Kaye11,明白了!您必须使用此选项:DF$TR