小编use*_*292的帖子

按ID的行数

数据集包含三个变量:id,sex和grade(factor).

mydata <- data.frame(id=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4), sex=c(1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1),
                     grade=c("a","b","c","d","e", "x","y","y","x", "q","q","q","q", "a", "a", "a", NA, "b"))
Run Code Online (Sandbox Code Playgroud)

对于每个ID,我需要查看我们有多少个唯一等级,然后创建一个新列(调用N)来记录等级频率.例如,对于ID = 1,我们有五个"等级"的唯一值,因此N = 4; 对于ID = 2,我们有两个"等级"的唯一值,所以N = 2; 对于ID = 4,我们有两个"等级"的唯一值(忽略NA),因此N = 2.

最终的数据集是

mydata <- data.frame(id=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4), sex=c(1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1),
                     grade=c("a","b","c","d","e", "x","y","y","x", "q","q","q","q", "a", "a", "a", NA, "b"))
mydata$N <- c(5,5,5,5,5,2,2,2,2,1,1,1,1,2,2,2,2,2)
Run Code Online (Sandbox Code Playgroud)

r

8
推荐指数
4
解决办法
235
查看次数

区分R中因子变量的级别

假设我的数据集包含三列:id(标识),case(字符)和value(numeric).这是我的数据集:

tdata <- data.frame(id=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), case=c("a","b","c","c","a","b","c","c","a","b","c","c","a","b","c","c"), value=c(1,34,56,23,546,34,67,23,65,23,65,23,87,34,321,56))

tdata
   id case value
1   1    a     1
2   1    b    34
3   1    c    56
4   1    c    23
5   2    a   546
6   2    b    34
7   2    c    67
8   2    c    23
9   3    a    65
10  3    b    23
11  3    c    65
12  3    c    23
13  4    a    87
14  4    b    34
15  4    c   321
16  4    c    56
Run Code Online (Sandbox Code Playgroud)

如果您注意到,对于每个ID,我们有两个c.如何将它们重命名为c1和c2?(我需要区分它们以便进一步分析).

r dataset

5
推荐指数
1
解决办法
83
查看次数

(1-previous_record)*current_record 的累积积

数据框包含两个变量 ( timeand rate) 和 10 个观测值

time <- seq(1:10) 
rate <- 1-(0.99^time)
dat <- data.frame(time, rate)
Run Code Online (Sandbox Code Playgroud)

我需要添加一个新列(称为new_rate)。

new_rate 定义如下

注意:new_rate_1是new列new_rate等的第一次观察。

new_rate_1 = rate_1
new_rate_2 = (1-rate_1)*rate_2
new_rate_3 = (1-rate_1)*(1-rate_2)*rate_3
new_rate_4 = (1-rate_1)*(1-rate_2)*(1-rate_3)*rate_4
...
new_rate_10 = (1-rate_1)*(1-rate_2)*(1-rate_3)*(1-rate_4)*(1-rate_5)*(1-rate_6)*(1-rate_7)*(1-rate_8)*(1-rate_9)*rate_10
Run Code Online (Sandbox Code Playgroud)

如何在基础 Rdplyr?

iteration r accumulate dplyr rolling-computation

5
推荐指数
1
解决办法
135
查看次数

使用SAS计算缺失值的平均值

假设我们有20个科目,每个科目我们有四个变量:X1,X2,X3和X4.我想计算每个主题的平均值,但问题是每当缺少值时,SAS都不会给出平均值.如何在调整n时进行此操作(如果没有缺失值,n = 4,如果有一个缺失值,则n = 3,等等)谢谢.

sas

3
推荐指数
1
解决办法
2万
查看次数

每行中的最大数量以及更多

我的数据集包含四个数值变量X1,X2,X3,X_4和一个ID列.

ID <- c(1,2,3,4,5,6,7,8,9,10)
X1 <- c(3,1,1,1,2,1,2,1,3,4)
X2 <- c(1,2,1,3,2,2,4,1,2,4)
X3 <- c(1,1,1,3,2,3,3,2,1,4)
X4 <- c(1,4,1,1,1,4,3,1,4,4)
Mydata <- data.frame(ID, X1,X2,X3,X4)
Run Code Online (Sandbox Code Playgroud)

我需要再创建两列:1)Max,和2)Var

1)最大列:对于每个只有一个最大值的行,我需要在Max变量中保存这个"max"值.如果行有多个,则Max值应为999.

2)Var列:对于只有一个最大值的行,我需要知道它是X1,X2,X3 $还是X4.

对于上面的数据集,这是输出:

ID  X1  X2  X3  X4  Max Var
1   3   1   1   1   3   X1
2   1   2   1   4   4   X4
3   1   1   1   1   999 NA
4   1   3   3   1   999 NA
5   2   2   2   1   999 NA
6   1   2   3   4   4   X4
7   2   4   3   3   4 …
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
1
解决办法
95
查看次数

如果值超出范围,则设置为NA

我的数据集包含6个字段和4个具有一些NA值的行.

a=c(5,6,7,12)
b=c(7,2,3,4)
c=c(8,8,21)
d=c(1,1)
e=c(1,2,5,9)
f=c(20,3,11)
length(c)=4
length(d)=4
length(f)=4
z=data.frame(a,b,c,d,e,f)


a   b   c   d   e   f
5   7   8   1   1   20
6   2   8   1   2   3
7   3   21  NA  5   11
12  4   NA  NA  9   NA
Run Code Online (Sandbox Code Playgroud)

这是我需要做的:对于字段a,c,d和f,如果值小于6或大于12,那么我需要将其设置为NA.此外,如果该值是alread NA则没有变化(保持NA).

我可以使用ifelse为每个字段做到这一点,但我的数据包含数十个字段,所以我想知道是否有一种有效的方法来做到这一点.

最终的数据是

a   b   c   d   e   f
NA  7   8   NA  1   NA
6   2   8   NA  2   NA
7   3   NA  NA  5   11
12  4   NA  NA  9   NA
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
1
解决办法
673
查看次数

删除每个ID的重复项

假设我的数据框(mydata)中有三个变量:1)id,2)case和3)value.

mydata <- data.frame(id=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), case=c("a","b","c","c","b","a","b","c","c","a","b","c","c","a","b","c","a"), value=c(1,34,56,23,34,546,34,67,23,65,23,65,23,87,34,321,87))


mydata 
    id case value
1   1    a     1
2   1    b    34
3   1    c    56
4   1    c    23
5   1    b    34
6   2    a   546
7   2    b    34
8   2    c    67
9   2    c    23
10  3    a    65
11  3    b    23
12  3    c    65
13  3    c    23
14  4    a    87
15  4    b    34
16  4    c   321
17  4    a    87
Run Code Online (Sandbox Code Playgroud)

对于每个id,我们可以有类似的"case"字符,它们的值可以相同或不同.所以基本上,如果它们的值相同,我只需要保留一个并删除副本.

那么我的最终数据将是 …

r duplicates dataframe

2
推荐指数
2
解决办法
189
查看次数

将数据框重塑为宽大的形状

数据包含两个变量:id和grade.每个ID可以为每个等级创建多个记录.

dat <- data.frame(id = c(1,1,1,2,2,2,2,3,3,4,5,5,5),
                  grade = c("a", "b", "c", "a", "a", "b", "b", "d", "f", "c", "a", "e", "f"))
Run Code Online (Sandbox Code Playgroud)

我想将数据重新整形为一个宽大的形状,这样每个id只有一个记录,每个唯一等级变成一个列.每列的值为0或1,具体取决于每个id的等级.

最终的数据集如下:

id  a   b   c   d   e   f
1   1   1   1   0   0   0
2   1   1   0   0   0   0
3   0   0   0   1   0   1
4   0   0   1   0   0   0
5   1   0   0   0   1   1
Run Code Online (Sandbox Code Playgroud)

我试过这个,但没有运气.

  n.dat <- reshape(dat, timevar = "grade",idvar = c("id"),direction = "wide") 
Run Code Online (Sandbox Code Playgroud)

r

2
推荐指数
1
解决办法
122
查看次数

排除R中特定行下面的所有记录

我的数据包含三个变量,其中包含三个唯一ID,每个变量都有多个记录.见下文

ID <- c(rep(1,7), rep(2,6), rep(3,5), rep(4,6))
t <- c(seq(1,7), seq(1,6), seq(1,5), rep(2,6))
y <- c(rep(6,7), rep(1,6), rep(6,5), rep(0.2,6))
z <- c(5,0,0,0,1,0,0,0,0,-1,0,0,0,4,2,NaN,0,1,0,0,1,Inf,Inf, Inf)
dat1 <- data.frame(ID, t, y, z)
Run Code Online (Sandbox Code Playgroud)

对于每个ID,如果z的值低于0(负),NaN,Inf或-Inf,我需要排除该记录及其下面的所有记录.

对于此数据,新处理的数据如下所示:

ID <- c(rep(1,7), rep(2,2), rep(3,2), rep(4,3))
t <- c(seq(1,7), seq(1,2), seq(1,2), rep(2,3))
y <- c(rep(6,7), rep(1,2), rep(6,2), rep(0.2,3))
z <- c(5,0,0,0,1,0,0,0,0,4,2,0,0,1)
dat2 <- data.frame(ID, t, y, z)
Run Code Online (Sandbox Code Playgroud)

r

2
推荐指数
1
解决办法
60
查看次数

通过检测每个id的最大值来创建新变量

我的数据集包含三个变量:

id <- c(1,1,1,1,1,1,2,2,2,2,5,5,5,5,5,5)
ind <- c(0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1)
price <- c(1,2,3,4,5,6,1,2,3,4,1,2,3,4,5,6)
mdata <- data.frame(id,ind,price)
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新变量(ind2),如果ind = 0,则ind2 = 0.另外,如果ind = 1,则ind2 = 0,除非价格值为max,则ind2 = 1.

新数据如下:

id  ind ind2    price

1   0   0   1
1   0   0   2
1   0   0   3
1   0   0   4
1   0   0   5
1   0   0   6
2   1   0   1
2   1   0   2
2   1   0   3
2   1   1   4
5   1   0   1
5   1   0   2
5   1   0 …
Run Code Online (Sandbox Code Playgroud)

r

1
推荐指数
1
解决办法
69
查看次数