字符串 使用tidyverse函数,我们可以通过按参与者对数据进行分组,从每个相关向量中删除前导NA值,以便所有数字都在组的第一行中,然后填充它们,以便 Dataframe 的向量都具有相同的长度(基于以下密切相关的问题:Remove leading NAs to align data):
library(tidyverse)
df %>%
group_by(participant) %>%
mutate(across(starts_with('slider'), ~ `length<-`(zoo::na.trim(.x), length(.x))))
participant slider_header slider_2_header prompt slider_scale
<dbl> <dbl> <dbl> <chr> <dbl>
1 1 9 2 Please 2
2 1 NA NA Do you NA
3 1 NA NA Does this NA
4 1 NA NA Have you NA
5 1 NA NA How many NA
6 1 NA NA Wjat is NA
7 1 NA NA What is NA
8 1 NA NA How man NA
9 1 NA NA How many3 NA
library(tidyverse)
(example_1 <- tibble(a=1:6,b=1:6))
#im going to slide column b up so that 456 slide up to begin after 2 rather than 3, this will leave a hole where 6 was
example_1$b[3:6] <- dplyr::lead(example_1$b[3:6],n=1)
# look at the result
example_1
3条答案
按热度按时间sbdsn5lh1#
根据你对问题的解释,我认为这应该做你想做的事情:
首先,一个简化版本的数据(如果你自己包括这个,这会变得更容易):
字符串
使用
tidyverse
函数,我们可以通过按参与者对数据进行分组,从每个相关向量中删除前导NA
值,以便所有数字都在组的第一行中,然后填充它们,以便 Dataframe 的向量都具有相同的长度(基于以下密切相关的问题:Remove leading NAs to align data):型
通过按“参与者”分组,该过程将针对每个“参与者”单独发生。如果你想对其他变量(比如date)进行分组,只需将其添加到
group_by
函数中。然后我们对每个变量应用一个函数,以“slider”开始:这个函数是用~
定义的,它使用zoo
包中的na.trim
从每个变量中删除NA,然后分配每个变量的原始长度,结果是用后面的NA填充它们,就像在你请求的数据中一样。mgdq6dx12#
代码的第一部分只是得到一个带有对角线值的 Dataframe
字符串
现在这个函数读取对角线值并将它们添加到第一列中
型
o0lyfsai3#
你还没有让它很容易帮助你,缺乏可复制的例子。但我可以说
我还没有找到一个函数,我可以向上移动一列或删除一个单元格,这将迫使数据向上。
使用dplyr::lead,将一列的全部或一部分向上滑动n个位置(dplyr::lag将向下滑动)
字符串