Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据因子更改变量值_R_Data Management - Fatal编程技术网

R 根据因子更改变量值

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,

我有一个如下所示的数据集:

尾部:

我想根据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,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